假设我有一个标签,v1.5
。进行了更多提交,并在标记 v1.5
之前的某个点创建了另一个分支 fix
。
现在 fix
中的修复已经完成,需要将其应用于 1.5
处标记提交所表示的代码的发布版本。
是否可以在不使用 git-cherry-pick
的情况下,在历史记录中的给定点 merge 来自 fix
的大量提交?
o ... (history)
|
o tag v1.5
|
o (can not have in v1.5)
|
o (can not have in v1.5)
|
o (can not have in v1.5)
|\
| \ (`fix` branch)
| \
| o (needed at v1.5)
o | -(can not have in v1.5)
| o (needed at v1.5)
| |
| o (needed at v1.5)
o | -(can not have in v1.5)
o (needed at v1.5)
最佳答案
是的,这可以通过rebase而不是cherry-pick来实现。无论使用哪种方法,最终结果都应该是相同的。
首先为fix分支创建一个新名称,使得原来的fix分支保持不变
git branch fixv1.5 fix
然后将 fixv1.5 重新设置为 v1.5
git rebase --onto v1.5 <upstream> fixv1.5
哪里<upstream>
应该是修复分支所基于的提交的 SHA,即下图中标记为 P 的那个。
现在您应该拥有如下所示的历史记录:
o ... (history)
|
o tag v1.5
| \
| \ A' B' C' D'
| ---o---o---o---o fixv1.5
|
o (can not have in v1.5)
|
o (can not have in v1.5)
|
o (can not have in v1.5) P
|\
| \ (`fix` branch)
| \
| o (needed at v1.5) A
o | -(can not have in v1.5)
| o (needed at v1.5) B
| |
| o (needed at v1.5) C
o | -(can not have in v1.5)
o (needed at v1.5) D
为了完整起见,cherry-pick 的等效用法是
git checkout -b fixv1.5 v1.5
git cherry-pick <upstream>..fix
关于git - 我可以在过去的提交中 merge future 的分支,而不 merge 它们之间的共享提交,或者不进行樱桃选择吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21313252/