修复 git 中的合并提交
Fixing a merge commit in git
我搞砸了。我将其他分支合并到我的分支。双方的变化都很大,所以我花了很长时间来解决冲突。提交合并后,我意识到我忘记添加一个文件,因此合并未完成。我不想用 "forgotten changes" 提交污染历史,所以我决定在推送之前修复它。我打电话
git reset --soft HEAD~
然后我添加了遗漏的更改并想重新提交。但是,git 不再知道它应该是合并提交。如果不重新进行整个合并,有什么出路吗?
您可以签出到分支上的特定提交,因此在合并发生之前返回并重做。
继续合并分支:
git log
将显示分支上具有关联 ID(或键)的所有提交,只需复制所需提交键的首字母
git checkout [commit_id you copied]
您现在应该在合并前的分支上。
如果您希望继续浏览提交,您可以通过提交 ID 保持结帐。
如果我想修改我的最后一次提交(无论是合并提交还是普通提交),我会怎么做:
- 进行更改(在您的情况下添加文件)
- 进行更改。例如。
git add .
将更改添加到上次提交
git commit --amend
大功告成
既然你已经不在那个点了,首先你得回到那个点。怎么样?
列出您最后的引用,以便找出您要恢复的合并提交的哈希值。执行
git reflog
在该列表中搜索并复制合并提交的哈希值。寻找类似 [...] merge origin/blablabal 的东西,就在 [...]reset moving to HEAD~ 下面
重置为该提交(就好像您还没有完成 git reset --soft HEAD~
)
git reset --hard HASH_FROM_BULLET_2
现在您正处于刚刚提交原始合并的位置,现在您可以从头开始进行 4、5 和 6。
我搞砸了。我将其他分支合并到我的分支。双方的变化都很大,所以我花了很长时间来解决冲突。提交合并后,我意识到我忘记添加一个文件,因此合并未完成。我不想用 "forgotten changes" 提交污染历史,所以我决定在推送之前修复它。我打电话
git reset --soft HEAD~
然后我添加了遗漏的更改并想重新提交。但是,git 不再知道它应该是合并提交。如果不重新进行整个合并,有什么出路吗?
您可以签出到分支上的特定提交,因此在合并发生之前返回并重做。
继续合并分支:
git log
将显示分支上具有关联 ID(或键)的所有提交,只需复制所需提交键的首字母
git checkout [commit_id you copied]
您现在应该在合并前的分支上。 如果您希望继续浏览提交,您可以通过提交 ID 保持结帐。
如果我想修改我的最后一次提交(无论是合并提交还是普通提交),我会怎么做:
- 进行更改(在您的情况下添加文件)
- 进行更改。例如。
git add .
将更改添加到上次提交
git commit --amend
大功告成
既然你已经不在那个点了,首先你得回到那个点。怎么样?
列出您最后的引用,以便找出您要恢复的合并提交的哈希值。执行
git reflog
在该列表中搜索并复制合并提交的哈希值。寻找类似 [...] merge origin/blablabal 的东西,就在 [...]reset moving to HEAD~ 下面
重置为该提交(就好像您还没有完成
git reset --soft HEAD~
)git reset --hard HASH_FROM_BULLET_2
现在您正处于刚刚提交原始合并的位置,现在您可以从头开始进行 4、5 和 6。