修改 git rebase

Umb*_*lla 2 git

我做了一个git rebase master涉及到手动合并三个文件的过程。在其中一个中,我错过了尾随换行符,导致文件末尾出现以下内容:

<<<<<<< HEAD
=======

>>>>>>> ... commit message
Run Code Online (Sandbox Code Playgroud)

这自然会导致 PHP 错误。我可以很容易地修复该文件,但我不想添加错误的“修复草率变基”提交。

如何修改 rebase 的此更改?或者,重复变基以便我能抓住它?

Lil*_*ard 6

这个问题基本上可以归结为“如何修改不是最新的提交?”。假设您没有将提交推送到任何地方,并进一步假设历史记录从该提交开始是线性的,这非常简单。

  1. 进行您想要应用于之前提交的更改。
  2. 找出您要修改的较早提交是什么。为了这些说明,我们将调用它$SHA,但您可以使用任何您想要识别此提交的方法。
  3. 跑步git commit --fixup $SHA
  4. 跑步git rebase -i --autosquash $SHA^

这将为您提供一个带有提交列表的编辑器。第一个提交应该是$SHA,第二个提交应该是您的编辑,接下来应该是截至 的其余提交HEAD。保存并关闭该编辑器。Git 现在将进行交互式变基,将您的更改应用到您想要修改的提交。


您可以使用另一种解决方案,该解决方案需要更多手动操作,但无需交互式变基即可工作。基本上,您可以直接签出要修改的提交(生成分离的头),进行更改,运行git commit --amend,然后将分支重新设置为新修改的提交之上。您实际上可能更喜欢这种风格,因为它对您正在做的事情更加明确,但交互式变基版本的好处是您可以通过交互式变基做更多事情。例如,您可以对提交重新排序、将多个提交压缩在一起、删除提交、重写提交等。您还可以使用--fixup--squash标志来git commit记录您希望执行的这些操作,而无需立即实际执行变基,然后您可以在完成后返回并执行一次大型交互式变基。