修复 git 中的合并提交

Fixing a merge commit in git

我搞砸了。我将其他分支合并到我的分支。双方的变化都很大,所以我花了很长时间来解决冲突。提交合并后,我意识到我忘记添加一个文件,因此合并未完成。我不想用 "forgotten changes" 提交污染历史,所以我决定在推送之前修复它。我打电话

git reset --soft HEAD~

然后我添加了遗漏的更改并想重新提交。但是,git 不再知道它应该是合并提交。如果不重新进行整个合并,有什么出路吗?

您可以签出到分支上的特定提交,因此在合并发生之前返回并重做。

继续合并分支:

git log

将显示分支上具有关联 ID(或键)的所有提交,只需复制所需提交键的首字母

git checkout [commit_id you copied]

您现在应该在合并前的分支上。 如果您希望继续浏览提交,您可以通过提交 ID 保持结帐。

如果我想修改我的最后一次提交(无论是合并提交还是普通提交),我会怎么做:

  1. 进行更改(在您的情况下添加文件)
  2. 进行更改。例如。 git add .
  3. 将更改添加到上次提交

    git commit --amend

大功告成

既然你已经不在那个点了,首先你得回到那个点。怎么样?

  1. 列出您最后的引用,以便找出您要恢复的合并提交的哈希值。执行

    git reflog

  2. 在该列表中搜索并复制合并提交的哈希值。寻找类似 [...] merge origin/blablabal 的东西,就在 [...]reset moving to HEAD~ 下面

  3. 重置为该提交(就好像您还没有完成 git reset --soft HEAD~

    git reset --hard HASH_FROM_BULLET_2

现在您正处于刚刚提交原始合并的位置,现在您可以从头开始进行 4、5 和 6。