据我所知,有两种方法可以在远程存储库中回滚git提交。
方法1:
git reset --hard <old-commit-id>
git commit -m "rolling back"
git push -f
方法2:
git revert <old-commit-id>
git commit -m "reverting the changes"
git push -f
在我看过的各种帖子中,没有提到git commit
要做。但是我的同事告诉我应该git commit
发出git push
-f
{{1}}。否则,推送将失败。我的同事是对的吗?我仍然怀疑它
答案 0 :(得分:4)
运行
git reset --hard <old-commit-id>
将丢弃所有本地更改并将当前分支点指向<old-commit-id>
。小心它,因为它是一个潜在危险的命令。
特别是,您应不通过强制推送来执行此命令,以撤消已推送到共享远程存储库的更改。它将是crossing-the-streams bad。这类似于锯掉你的合作者所在的分支!
所以这个方法是一个很大的禁忌,至少在其他人可以访问远程仓库的情况下。
git commit
之后git reset
应该使用git commit -m "rolling back"
吗?
如果您决定继续(不要!),您将不需要运行
git reset
除非您在-f
命令之后立即进行其他更改(在这种情况下,您还需要在提交之前暂存这些更改)。
我需要使用
-f
(强制推送)吗?
是的,一般来说,你需要使用git commit
,因为推送是非快进的。
此方法具有非破坏性,被认为是恢复远程仓库更改的良好做法。
git revert
之后git revert <old-commit-id>
应该使用<old-commit-id>
吗?
运行
git commit -m "reverting the changes"
创建一个提交,撤消git revert
中引入的更改。因此,没有必要
-f
除非您在-f
命令之后立即进行其他更改(在这种情况下,您还需要在提交之前暂存这些更改)。
我需要使用{{1}}(强制推送)吗?
不,你不需要在这里强行推送(不需要{{1}}),因为在这种情况下,推送只是一个快进的推送。