Git:如何在变基期间修复提交

8
我遇到了以下问题:
在 Git rebase 过程中,其中一个自动解决的提交存在错误,即由于自动解决,头文件中的函数声明第二次被引入,导致编译失败。
我的问题是:是否可以回到那个自动解决的提交,手动解决它,然后继续 rebase,假设我仍在 rebase 过程中?
2个回答

10

你应该先完成原始的变基操作,这样你的代码库就处于一个已知的状态。接下来可以使用交互式变基轻松编辑引入错误的提交。查看要修复的提交的SHA1值,然后执行:

git rebase -i <sha1>^

打开编辑器,其中包含从HEAD到您想修复的提交的提交。从列表中找到该提交(应该是第一个),将单词“pick”替换为“edit”,保存并退出编辑器。

现在您可以修复错误,然后执行

git commit -a --amend
git rebase --continue

就是这样!


非常感谢您的帮助!您知道在我正在变基时是否有可能修复提交吗?我的问题是我的变基非常大,我想在每个手动解决的提交后检查代码是否编译。我尝试过git reset --soft HEAD^,但我认为在git rebase --continue之后跳过了提交(它没有显示在历史记录中)。 - Tomek
我认为您无法在原始rebase嵌套中启动交互式rebase。但是,您可以在任何地方进行修改,并将它们包含在每个手动解决的提交中。 - Kalle Pokki
再次感谢!是的,你说得对 - 如果我正在进行另一个rebase操作,rebase -i将不会启动。由于在“错误”的提交后我没有继续rebase,所以我想做以下事情:
  1. git stash(保存当前已解决的更改)
  2. 编辑错误解决的文件
  3. git add <file>
  4. git commit --amend
  5. git stash pop 您认为这在“内部”rebase过程中是否正确? 我猜git commit --amend将更改编辑提交的SHA校验和。
- Tomek
非常抱歉 - 我刚刚意识到,我可以在当前手动解决的提交中应用修复,并使用建议的git rebase -i在我的当前rebase完成后将更改应用到正确的位置。你真的帮了我很多 - 谢谢! - Tomek

1

虽然在一个rebase中进行另一个rebase是行不通的,但可以使用git commit --amend来修改最后一次提交的修改内容。
如果问题是由当前正在rebase的提交的前一次提交引起的(即它是最后一次提交),则可以在不影响rebase过程的情况下修改它。

因此,当我遇到这种情况时,我执行了以下操作:

  1. Unstage the current manual modification being rebased:

    $ git reset HEAD <files being rebased>
    
  2. Stage my fix for the last commit causing the problem:

    $ git add <files with compilation fix>
    
  3. Add the compilation fix into the last committed modification:

    $ git commit --amend
    
  4. Return to the current manual modification being rebased:

    $ git add <files being rebased>
    
希望这可以帮到您。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接