将GIT HEAD恢复到旧的提交

问题描述 投票:1回答:1

我意识到我在分支中提交了一些不好的东西,我想恢复到之前的提交。我已经确认 git checkout 8dd018c 让我想到了之前的一个提交,我想把HEAD恢复到现在,我尝试了以下方法。

git checkout 8dd018c
git status
HEAD detached at 8dd018c
nothing to commit, working directory clean
git reset --hard  8dd018c
git push origin HEAD:<my_branch>

但得到的是:

 ! [rejected]        HEAD -> my_branch (non-fast-forward)
error: failed to push some refs to 'https://github.com/my/repository.git'
hint: Updates were rejected because a pushed branch tip is behind its remote
hint: counterpart. Check out this branch and integrate the remote changes
hint: (e.g. 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

我怎么做才正确?我不是唯一一个在这个版本库工作的人,所以我认为...。push -f 是不可能的,是吗?

git checkout revert revision-history
1个回答
2
投票

所以我想 push -f 是不可能的,是吗?

出不出题并不重要。它是... 不可能 来做你想做的事,而不需要使用武力,因为你要求远程丢弃它在 8dd018c但它不会心甘情愿地这样做。

不过,你可以放心,因为。

  • 没有人依靠这个分支,它是你的。

  • 你可以推 --force-with-lease,意思是说:"请你按照我说的去做,但前提是安全"(安全的意思是没有人推到你的分支,既然是你的分支,那就很好保证了)。

  • 你只要完全放弃这个分支,就可以不费吹灰之力地解决整个问题。毕竟,这只是一个 名称. 因此,开始一个新的分支与 不同 名为 8dd018c,并推动 分支。远程会很乐意让你这么做。当然,你还想删除旧的分支,同样,这需要你以某种形式使用武力。

  • 你可以在不使用武力的情况下解决整个问题,用一个 revert 提交。您不需要删除提交,而是添加一个 新的 使你 编码 倒退回当初的状态。8dd018c. 实际上,我认为这是我最喜欢的解决方案。当然,坏的代码会留在你已经推送的提交中,但谁在乎呢?人们确实会犯错。

基本上,如果你要推送一个分支到共享的远程,你会遇到这种问题,你需要协调好自己的关系。我个人非常喜欢在推送之前改写我的分支的历史,这意味着我不想推送它,直到我很好地完成它。如果我担心我的电脑会被总线撞到,我可以做一个备份,甚至我可以添加第二个远程,然后把分支推送到那个地方代替。其他的人则会更谨慎地将他们的分支推送到共享的远程服务器上,然后用以下方法改变它的历史记录 force. 这是你应该和你的团队商量的事情。


1
投票

你可以用最小的麻烦做的方式是。

git checkout old-commit
git reset --soft the-branch
git commit -m "Going back in time"
# now you are one revision on top of the-branch but content is like old-revision
# if you like the result
git branch -f the-branch # set branch where you are now
git checkout the-branch

现在你可以推和东西。

© www.soinside.com 2019 - 2024. All rights reserved.