此问题在此处已有答案:
How can I undo pushed commits using git?(14个答案)
4天前关闭。
我正在做一个叫“功能”的分支。
- 我推送了一个空的提交'New'**(Commit 1)**来指示我的分支的创建(这是我公司的标准)。
- 然后我编辑了一个重要的文件,并将其推入第二次提交**(提交2)**。
- 我运行了一个
reset --hard
来返回到上一个干净的提交 (Commit 1)。 - 然后我以一种干净的方式重新进行了修改,确保不会引起任何bug。我在第三次提交**(Commit 3)**中推送了我的修改。
现在当我运行git status
的时候,它告诉我分支Feature和origin/Feature已经分开了,并且每个分支都有一个提交,我猜我将不得不运行rebase
分支。
我的问题是:在git reset
之后,我应该如何进行提交以确保我没有一个最终导致分支分歧的提交?在git reset
之后,你如何继续提交和推送?我是否错过了一个步骤?
我的公司使用TortoiseGit,所以所有的命令都是通过图形界面运行的。
1条答案
按热度按时间iyr7buue1#
让我们把你的四个要点称为步骤1到4。让我们假设你对步骤4的描述是不正确的;你做了commit 3,但是你没有推动它,因为你不能--这就是问题所在。
所以。你在第一步和第二步都做了推。但是在第三步你遗漏了一个推。
重置为1后,你需要强制推送分支,否则你会在提交2时离开远程,这是你最后成功推送的东西--导致标题中出现“分支分叉”的情况。
如果功能现在在3上,您可以通过现在强制推动来解决问题。
但是正如你所知道的,第3步中正确的做法是永远不要硬重置,硬重置是混乱的、暴力的(也是危险的),并且可能导致需要强制推送,这对团队中的其他人都是不利的。你应该直接回复第2步,导致直线上的四次提交:
那样的话,就不会发生发散,也就不需要力的推动。
所以,总而言之:
如何在git重置后继续提交和推送?
理想情况下,你在按下后不要复位。但如果你这样做了,你将不得不强制按下才能继续。
我错过了一步吗?
是的,你错过了力推中的力。但最好根本不采取第三步。