在我提交的Git中,例如.A - B - C我想编辑B提交,我
git rebase -i <A-commit-hash>,edit在Bcommit 前写命令,B提交后,git rebase会立即停止,因此我可以修复任何我想要的东西git commit --amend,
git rebase --continue.据我所知,这是如何做到这一点的最佳实践.使用这种方法,我可以编辑过去的任何提交(只要它还没有被推送到远程分支),而且使用-p标志我甚至可以保留合并.这太棒了.
我目前的问题是:我在合并提交中的一行上做了一个错误(拼写错误)(当合并两个分支时解决冲突).
我想解决它,但我不知道如何git rebase停止合并提交.该git rebase -p -i <blah>列表忽略了合并提交,所以我不能edit在它前面写命令并git rebase停在那里让我编辑它.
有什么帮助吗?我只想在合并提交中修复此行,同时保留它之后的所有提交(和合并).
谢谢.
Ric*_*sen 79
当涉及合并时,Git不容易进行交互式rebase.该-p选项在-i内部使用该机制,因此将两者混合起来并不起作用.
然而,git rebase这只是一种自动化的方式来做很多樱桃选择.您可以通过手动挑选来复制其行为,以获得对该过程的更多控制.它不太方便,更容易出现人为错误,但可能.
这是我建议的方法:
git rebase进入提交(合并的子代)git reset --hard HEAD^手动进入合并git commit --amend修复合并git cherry-pick在合并后返回提交git rebase --continue完以下是具体步骤:
deadbeef.facef00d.git rebase -i deadbeef.facef00d进行编辑.facef00d,运行git reset --hard HEAD^.你现在应该在deadbeef(git rev-parse HEAD应该打印deadbeef).git add暂存它们.git commit --amend以将阶段修复与不良合并提交融合.结果现在将具有不同的SHA1(不是deadbeef).git cherry-pick facef00d以将更改应用于facef00d固定合并提交.git rebase --continue来完成.现在有了--rebase-mergesGit 2.22 及更高版本中可用的选项,这变得容易多了。此选项保留合并拓扑,并与交互式变基一起使用。
它看起来像这样,假设B是要修改的合并提交:
label onto
... some branch definitions ...
reset onto
merge -C B branch-name # Merge branch 'B' into whatever
pick C
Run Code Online (Sandbox Code Playgroud)
您现在可以在和之间插入一个b(或break):mergepick
merge -C B branch-name # Merge branch 'xyz' into whatever
break
pick C
Run Code Online (Sandbox Code Playgroud)
在中断commit --amend合并,然后继续变基。
这也适用于修复提交。例如,假设带有合并修复程序的提交是D. 您可以在合并提交后立即将修复提交 D 移动到:
merge -C B branch-name # Merge branch 'xyz' into whatever
fixup D
pick C
Run Code Online (Sandbox Code Playgroud)
请参阅git-merge 手册页的变基合并部分。