当 git rebase 两个具有共享历史记录的分支时,有没有一种简单的方法可以让共同历史保持共同?

2024-04-17

假设我们有以下修订图:

A-X-Z--B
     \
      \-C

A 在 B 和 C 之前。进一步假设我从上游对 A 进行变基,创建一个新的提交 A*,然后将 B 和 C 变基到 A*。生成的修订图如下:

A*-X'-Z'-B
 \
  \-X"-Z"-C

请注意,共享历史记录不再共享。有没有一种简单的方法可以解决这个问题,除了重新确定 B 的基础,然后明确地将 C 重新确定为 Z' 的基础之外。换句话说,是否有更好的方法可以同时自动对多个分支进行变基以保留共享历史记录?必须人为地在分割点放置一个标签,或者手动检查图表以找出提交的 sha1,以便在其上重新建立 C 的基础以保留共享历史记录,这似乎有点尴尬,更不用说开辟了可能性错误,特别是因为我每次变基时都必须执行此操作,直到将更改检查到上游分支。


git rebase --committer-date-is-author-date --preserve-merges --onto A* A C
git rebase --committer-date-is-author-date --preserve-merges --onto A* A B

这应该使公共提交具有相同的 sha1 并保留任何合并。在这种情况下,不需要保留合并,但会成为一个不那么琐碎的历史问题。

要对历史记录中包含 A 的所有分支执行此操作,请执行以下操作:

git branch --contains A | xargs -n 1 git rebase --committer-date-is-author-date --preserve-merges --onto A* A 

希望这可以帮助。

UPDATE:

这可能是更清晰的语法:

for branch in $(git branch --contains A); do git rebase --committer-date-is-author-date --preserve-merges --onto A* A $branch; done
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当 git rebase 两个具有共享历史记录的分支时,有没有一种简单的方法可以让共同历史保持共同? 的相关文章

随机推荐