如何在不丢失Git中的最后一个提交的情况下将HEAD重置为某个提交?
我的申请中断。 我找不到错误在哪里,我知道它在我提交的提交( 2201e03 )时开始中断。
我不知道如何去做,所以我决定做git reset --hard 619176e
将我的应用程序重新设置回原来的工作位置。
现在是工作。 我收到了消息“HEAD现在在619176e修复了CD创建和编辑中的UI”,我的应用程序现在也回来了。 很好!
然后,我开发更多,保存,提交,并尝试再次推送,而我不能。 只要我进行修改并尝试推送,我就会收到一条消息告诉我,我落后了7次提交,我应该执行并按PULL然后按下PUSH。 但我不想那样。
如果我这样做,我的申请将再次破裂。 因此,即使我现在落后于7次提交。 我真的不想删除那些提交,但我仍然想从619176e前进。
我该怎么办 ? 如果我想保留这7个提交并强制git认为619176e是我的HEAD或MASTER? 并从这里继续前进?
我应该使用git reset HEAD^
?
任何提示或建议将是我的巨大帮助!
基本的问题是,你不想扔掉有缺陷的提交大师,但这正是git reset --hard 619176e
所做的。 你确实重置了你的分支(我认为它是分支master
分支),但是你推送的远程分支仍然指向旧的(错误的)状态,即7个提交。
正如Dacotah已经提出的那样,这是分支机构的完美用例。 您可以通过git checkout 619176e -b branchname
创建一个从提交619176e
开始的新分支。 然后,您可以引入新的更改,提交并可能推送它们。
只要你想重新整合master
的工作和它上面的错误,你就必须决定你想使用哪部分工作,哪些部分不使用。 您也可以修复master
的错误。 您可以将这些更改提交给master
,然后您可以合并分支或在主设备上重新绑定新分支。
在这种情况下,我可能会分支我的代码,一旦我回去几次提交。 我不确定这是否是一种最佳做法,但它是一种潜在的修复方法。 分支的代码是git checkout -b BranchName
我要告诉你的是非常危险的 。 如果你使用:
git push -F
这应该强制推送到远程并从619176e开始删除任何提交。 这有几个问题。 首先,如果你有其他用户,他们的历史可能会有不好的承诺,如果他们推动,那些不好的承诺会回到你的回购。 其次,如果在远程中有其他有效的提交,则会失去这些提交。
我建议一个接一个地恢复坏提交,然后如果你想在推送已清理的存储库之前压缩它们(使用交互式rebase)。
链接地址: http://www.djcxy.com/p/43557.html上一篇: How to reset HEAD to a certain commit without losing last commit(s) in Git?