Git存储库在重新设置基础后不同步

Git存储库在重新设置基础后不同步,git,version-control,git-rebase,Git,Version Control,Git Rebase,我已经将2个提交(A和B)压缩为一个新的提交(C)。删除前两个提交(A和B)。 我将这些提交从我的开发repo推送到一个中央(裸)存储库。两个回购协议上的git日志确认提交A和B已被删除。问题是,当我对第三个存储库进行拉取时,它已经有了(a和B),现在它有了所有三个提交(a、B和C) 我原以为拉动会同步这些变化。我是否需要签出~1,然后合并到新更改中?这似乎是一个麻烦,尤其是在生产环境中。这主要是在中介绍的,但对我的口味来说,它有点模糊 您应该知道,git-pull-origin-master完

我已经将2个提交(A和B)压缩为一个新的提交(C)。删除前两个提交(A和B)。 我将这些提交从我的开发repo推送到一个中央(裸)存储库。两个回购协议上的
git日志
确认提交A和B已被删除。问题是,当我对第三个存储库进行拉取时,它已经有了(a和B),现在它有了所有三个提交(a、B和C)

我原以为拉动会同步这些变化。我是否需要签出~1,然后合并到新更改中?这似乎是一个麻烦,尤其是在生产环境中。

这主要是在中介绍的,但对我的口味来说,它有点模糊

您应该知道,
git-pull-origin-master
完全等于
git-fetch-master;git合并源代码/主代码
。换句话说,您已经要求git将B和C合并在一起。有一个原因是不适宜对已经发布的更改重新进行基础设置:因为恢复旧的提交非常容易

因为这是一个简单的挤压,
git pull--rebase
将能够解决这个问题。重置到错误合并之前的位置,然后说
git pull--rebase origin master
(或者
git rebase origin/master
,因为您已经获取了)。这将神奇地将A、B和任何后续提交移植到C上,它将注意到A+B=C


您可能希望将此设置为默认设置,因为它可以避免类似这样的混乱-将configuration
branch..rebase
设置为true。

通常建议仅在没有与其他存储库共享的代码上使用git rebase,原因正是如此。我不能简明扼要地解释为什么,但如果你读一下“Git自下而上”会有意义的,非常感谢<代码>首先,倒带头部以在其上重放您的工作…配置提示也非常好。git的强大给我留下了深刻的印象。