我可以在 git 中合成一个跳过单个变更集的分支吗
Can I synthesize a branch in git that skips a single change set
假设以下 git
分支:A -> B -> C -> D -> E -> F -> G
我通过 git bisect
确定提交 C 引入了错误,但恢复 C 在分支顶部引入的更改并不能解决问题。这向我表明,在该分支的后续提交中还有其他错误。
有没有办法合成以下分支:A -> B -> D1 -> E1 -> F1 -> G1,其中 1 表示提交 C 中引入的更改不存在?然后我会在该分支上 运行 git bisect
以确定找到另一个错误。 [希望这不需要重复多次]
是:
git checkout -b newbranch <specifier-for-B>
git cherry-pick <specifier-for-C>..<specifier-for-G>
这些<specifier>
可以是raw hash ID,也可以是分支名,也可以是分支名加上~<em>数</em>
来统计返回 number
首次提交,依此类推。诀窍是创建一个新分支,以最后一次好的提交结束,然后在其余可能好的提交中挑选,不包括已知的错误提交。
有了这个新分支后,您可以使用 git rebase -i
或 git rebase --onto <target> <exclude>
删除更多提交,如果您愿意的话。
您可以交互地变基并删除该提交。
首先创建测试分支:
git checkout -b test
接下来,开始变基:
git rebase -i C^ # the parent of C
当您处于交互式 rebase 屏幕时,删除包含提交 C
.
的行
这将使 save
分支有效匹配 A -> B -> D1 -> E1 -> F1 -> G1
,您可以继续测试。
如果您发现 C
是您需要删除的唯一提交,另一种选择是还原它,这样您就不需要推送任何修改已推送提交的历史记录:
git checkout master # get back to where you started
git revert C # will create a revertion commit
git push # will only push 1 new commit, the inverse of C
假设以下 git
分支:A -> B -> C -> D -> E -> F -> G
我通过 git bisect
确定提交 C 引入了错误,但恢复 C 在分支顶部引入的更改并不能解决问题。这向我表明,在该分支的后续提交中还有其他错误。
有没有办法合成以下分支:A -> B -> D1 -> E1 -> F1 -> G1,其中 1 表示提交 C 中引入的更改不存在?然后我会在该分支上 运行 git bisect
以确定找到另一个错误。 [希望这不需要重复多次]
是:
git checkout -b newbranch <specifier-for-B>
git cherry-pick <specifier-for-C>..<specifier-for-G>
这些<specifier>
可以是raw hash ID,也可以是分支名,也可以是分支名加上~<em>数</em>
来统计返回 number
首次提交,依此类推。诀窍是创建一个新分支,以最后一次好的提交结束,然后在其余可能好的提交中挑选,不包括已知的错误提交。
有了这个新分支后,您可以使用 git rebase -i
或 git rebase --onto <target> <exclude>
删除更多提交,如果您愿意的话。
您可以交互地变基并删除该提交。
首先创建测试分支:
git checkout -b test
接下来,开始变基:
git rebase -i C^ # the parent of C
当您处于交互式 rebase 屏幕时,删除包含提交 C
.
这将使 save
分支有效匹配 A -> B -> D1 -> E1 -> F1 -> G1
,您可以继续测试。
如果您发现 C
是您需要删除的唯一提交,另一种选择是还原它,这样您就不需要推送任何修改已推送提交的历史记录:
git checkout master # get back to where you started
git revert C # will create a revertion commit
git push # will only push 1 new commit, the inverse of C