假设我们有以下修订图:
A-X-Z--B
\
\-C
Run Code Online (Sandbox Code Playgroud)
在B和C之前使用A.进一步假设我从上游重新绑定A,创建一个新的提交A*,然后将B和C重新绑定到A*上.生成的修订图如下:
A*-X'-Z'-B
\
\-X"-Z"-C
Run Code Online (Sandbox Code Playgroud)
请注意,不再共享共享历史记录.有没有一种简单的方法可以解决这个问题,除了说,重新定义B然后明确地将C重新定位到Z'.换句话说,是否有更好的方法可以同时自动修改多个分支以保留共享历史记录?只是人为地在分割点放置一个标记,或者手动检查图形以找出修改C以保留共享历史记录的提交的sha1似乎有点尴尬,更不用说开放可能性了错误,特别是因为我必须在每次改变时都这样做,直到我检查上游分支的变化.
Ada*_*ruk 16
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
Run Code Online (Sandbox Code Playgroud)
这应该保持公共提交具有相同的sha1并保留任何合并.在这种情况下,不需要保留合并,但是这将成为一个不太重要的历史问题.
要对其历史记录中包含A的所有分支执行此操作,请执
git branch --contains A | xargs -n 1 git rebase --committer-date-is-author-date --preserve-merges --onto A* A
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.
更新:
这可能是更清晰的语法:
for branch in $(git branch --contains A); do git rebase --committer-date-is-author-date --preserve-merges --onto A* A $branch; done
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6396 次 |
| 最近记录: |