我已经将2个提交(A和B)压缩成一个新的提交(C)。前两个提交(A和B)已删除。
我将这些提交从我的开发仓库推送到中央(裸)存储库。两个repos上的git-log
确认已删除提交A和B.问题是当我对已经拥有(A和B)的第三个存储库进行拉取时,它现在具有所有三个提交(A,B和C)。
我原以为拉动会同步这些变化。我是否需要签出A~1然后合并新的更改?这似乎很麻烦,特别是在生产环境中。
答案 0 :(得分:8)
这主要涵盖在"Recovering from upstream rebase"中,但对我的口味有点混淆。
您应该知道git pull origin master
完全等于git fetch master; git merge origin/master
。换句话说,你已经要求git将B和C合并在一起。有一个原因是为了修改已经发布的更改是不可取的:因为复活旧提交很容易。
由于这是一个简单的壁球,git pull --rebase
将能够解决这个问题。重置为错误合并之前的位置,并说出git pull --rebase origin master
(或git rebase origin/master
,因为您已经提取了)。这将神奇地将A,B和任何后来的提交移植到C上,它会注意到A + B = C.
您可能希望将其设为默认值,因为它可以避免像这样的混乱 - 将配置branch.<name>.rebase
设置为true。