我已将 2 个提交(A 和 B)压缩为一个新的提交(C)。前两个提交(A 和 B)被删除。我将这些提交从我的开发存储库推送到中央(裸)存储库。两个 repos 上的git-log
确认提交 A 和 B 已被删除。问题是当我对已经拥有(A 和 B)的第三个存储库进行拉取时,它现在拥有所有三个提交(A、B 和 C)。
我原以为拉动会同步这些更改。我需要签出 A~1 然后合并新的更改吗?这似乎很麻烦,尤其是在生产环境中。
我已将 2 个提交(A 和 B)压缩为一个新的提交(C)。前两个提交(A 和 B)被删除。我将这些提交从我的开发存储库推送到中央(裸)存储库。两个 repos 上的git-log
确认提交 A 和 B 已被删除。问题是当我对已经拥有(A 和 B)的第三个存储库进行拉取时,它现在拥有所有三个提交(A、B 和 C)。
我原以为拉动会同步这些更改。我需要签出 A~1 然后合并新的更改吗?这似乎很麻烦,尤其是在生产环境中。
这主要在"Recovering from upstream rebase"中进行了介绍,但我的口味有点模糊。
你应该知道git pull origin master
正好等于git fetch master; git merge origin/master
。换句话说,您已经要求 git 将 B 和 C 合并在一起。不建议对已发布的更改进行 rebase 是有原因的:因为恢复旧的提交很容易。
由于这是一个简单的壁球,git pull --rebase
将能够弄清楚这一点。重置到错误合并之前的位置,然后说git pull --rebase origin master
(或者git rebase origin/master
,因为你已经获取了)。这将神奇地将 A、B 和任何后续提交移植到 C 上,它会注意到 A + B = C。
您可能希望将此设置为默认值,因为它可以让您避免这样的混乱——将配置设置branch.<name>.rebase
为 true。