3

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

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

4

1 回答 1

9

这主要在"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。

于 2011-01-07T01:51:17.800 回答