mbl*_*the 19
不确定这是否是“有福的”方式来做到这一点,但这是我为解决同样的问题所做的,而不必“强行推动”或任何类似的事情。
让我们假设你的历史看起来像这样(M 是失败的合并):
-A--B--C--M (master points here)
\ /
D----E
Run Code Online (Sandbox Code Playgroud)
git checkout -b merge_fix <commit ID E>在我们犯任何错误之前运行会创建一个分支:
-A--B--C--M (master points here)
\ /
D----E (HEAD and merge_fix point here)
Run Code Online (Sandbox Code Playgroud)
现在,让我们在我们的新分支上重新进行合并。我们不能只合并 in master,所以我们需要在错误合并之前手动选择提交:git merge <commit ID C>不要犯上次犯的错误!
-A--B--C--M (master points here)
\ X
D----E-G (HEAD and merge_fix point here)
Run Code Online (Sandbox Code Playgroud)
假设提交G看起来不错,现在我们要与master分支的顶部同步。这个命令告诉 git 忽略对 master 所做的更改,并强制我们的更改成为合并结果:git merge -s ours master
-A--B--C--M (master points here)
\ X \
D----E-G--H (HEAD and merge_fix point here)
Run Code Online (Sandbox Code Playgroud)
最后,(再次假设提交H看起来不错,我们希望快进master以包含我们的固定合并:
git checkout master
git merge merge_fix
Run Code Online (Sandbox Code Playgroud)
这实际上只是将master分支指针移动到H,但我会借此机会稍微清理一下我的 ASCII 艺术:
-A--B--C--M--H (HEAD, master, and merge_fix all point here)
\ X /
D----E--G
Run Code Online (Sandbox Code Playgroud)
你有它!您已经成功地重新完成了合并,而没有使任何历史记录失效!
你可以这样做,就像这样:
那是:
git reset --hard SHA1
git merge branchname
git commit
git push --force remotename branchname
Run Code Online (Sandbox Code Playgroud)
请记住,这git push --force将重写您在远程分支上的任何内容,使用该分支的其他人也可能受到此影响。(通常你不应该这样做。)
| 归档时间: |
|
| 查看次数: |
23799 次 |
| 最近记录: |