【问题标题】:Fixing a merge commit in git修复 git 中的合并提交
【发布时间】:2018-01-24 21:21:46
【问题描述】:

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

git reset --soft HEAD~

然后我添加了错过的更改并想重新提交。但是,git 不再知道它应该是一个合并提交。有没有办法不重新做整个合并?

【问题讨论】:

    标签: git git-merge git-reset


    【解决方案1】:

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

    继续合并分支:

    git log
    

    将显示具有关联 ID(或密钥)的分支上的所有提交,只需复制所需提交密钥的第一个字母

    git checkout [commit_id you copied]
    

    您现在应该在合并之前的分支上。 如果您希望继续浏览提交,可以保留从提交 id 结帐。

    【讨论】:

    • 我知道我可以“全部重做”,但我问是否可以“不重新做整个合并”来修复它(因为这不是一件容易的事)。
    • 请注意,如果您 checkout 之前的提交,则您处于 detached HEAD state 并且您无法在该状态下提交任何内容。如果您想重做合并(没有必要,正如我在另一个答案中解释的那样),您必须使用git reset --hard [commit_id_you_copied] 硬重置 到该提交
    【解决方案2】:

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

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

      git commit --amend

    你已经完成了

    既然你已经不在那个地方了,首先你必须回到那个地方。怎么样?

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

      git reflog

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

    3. 重置为那个提交(好像你还没有完成git reset --soft HEAD~

      git reset --hard HASH_FROM_BULLET_2

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

    【讨论】:

      猜你喜欢
      • 2011-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-29
      • 1970-01-01
      • 1970-01-01
      • 2013-10-23
      • 2013-05-08
      相关资源
      最近更新 更多