git reset --hard 在分支上产生了分歧。
git reset --hard 在分支上产生了分歧。
我正在一个名为Feature的分支上工作。
- 我推送了一个空提交'New' (提交1) 来表明我的分支的创建(这是我们公司的标准)。
- 然后我编辑了一个重要的文件,并在第二次提交中推送了它 (提交2)。后来我意识到我的修改实际上导致了一个未知的错误。
- 我运行了
reset --hard
回到之前的干净提交(提交1)。 - 然后我以干净的方式重新进行了修改,并确保不会导致任何错误。我将我的修改推送到了第三次提交 (提交3)。
现在当我运行git status
时,它告诉我我的分支Feature和origin/Feature已经分叉,每个都有一个提交。我猜我需要对我的分支进行rebase
。
我的问题是:在git reset
之后,我应该如何处理我的提交,以确保我没有“落后”的提交最终导致分支分叉?在git reset
之后,如何继续进行提交和推送?我错过了什么步骤吗?
我们公司使用TortoiseGit,所以所有命令都是通过图形界面运行的。
在上述内容中,出现了一个名为"git reset --hard results in a diverged branch"的问题。其问题的原因是,在步骤1和步骤2中进行了推送,但在步骤3中没有进行推送。在回滚到步骤1之后,需要使用force push来推送分支,否则远程分支仍停留在最后一次成功推送的commit 2,从而导致分支发散的情况。
解决该问题的方法是进行force push,以使feature分支回到commit 3。
然而,正如之前提到的,步骤3中的正确做法从未是硬重置,因为这样做会导致混乱、暴力(以及危险),可能需要进行force push,这对团队中的其他人来说可能不利。你应该只是回滚commit 2,这样就可以得到一个直线上的四个commit:
1 -- 2 -- undo 2 -- 3
这样做既不会导致分支发散,也不需要进行force push。
因此,总结起来:
如何在git reset后继续提交和推送?
理想情况下,在推送后不要进行重置。但如果你确实进行了重置,那么你将不得不进行force push以便继续推送。
是否漏掉了某个步骤?
是的,你忘记了在force push中使用force。但最好根本不要进行步骤3。
如果现在强制推送我的commit 3,会删除commit 2吗?
实际上是的。"Ideally, my commit no. 2 still needs to exist so we can track the bug"。那么你不应该进行硬重置。你可以为origin/feature(即commit 2)打上标签并推送标签。但最好的解决方法是完全撤销硬重置;那真是个灾难性的操作。你可以撤销重置,然后进行回滚,最后再选择commit 3,以获得图表中的直线。
文章结束。