git - 修改一个git rebase

标签 git

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

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

>>>>>>> ... commit message

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

我如何修改对 rebase 的更改?或者,重复 rebase 以便我可以捕获它?

最佳答案

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

  1. 做出您想要应用到您之前提交的更改。
  2. 弄清楚您要修改的早期提交是什么。为了这些说明,我们将其称为 $SHA,但您可以使用任何您想要识别此提交的方式。
  3. 运行 git commit --fixup $SHA
  4. 运行 git rebase -i --autosquash $SHA^

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


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

关于git - 修改一个git rebase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9270537/

相关文章:

git - 有没有办法在 'git add' 命令之前/之后运行 git hook?

git - STATUS_ACCESS_VIOLATION 与 git svn

git - 如何将 git 存储库的 COPY(存档,而不是克隆)连接到其远程?

git - 没有为 Heroku 排队的键?

node.js - Heroku 部署,未添加 git remote

ios - 在版本控制 checkin 中包含 CocoaPods?

svn - git svn : Delta source ended unexpectedly

git - 在 git commit 中查找编辑最多的文件

Git 因提交而损坏

git - Gitlab的实例域是什么?