如果我使用1)git hard reset或2)git revert回滚,是否需要git提交?

时间:2014-11-18 19:47:05

标签: git git-push git-commit git-reset git-revert

据我所知,有两种方法可以在远程存储库中回滚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}}。否则,推送将失败。我的同事是对的吗?我仍然怀疑它

1 个答案:

答案 0 :(得分:4)

方法1(不安全!)

运行

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,因为推送是非快进的。

方法2(安全)

此方法具有非破坏性,被认为是恢复远程仓库更改的良好做法。

  

git revert之后 git revert <old-commit-id> 应该使用<old-commit-id>吗?

运行

git commit -m "reverting the changes"

创建一个提交,撤消git revert中引入的更改。因此,没有必要

-f

除非您在-f命令之后立即进行其他更改(在这种情况下,您还需要在提交之前暂存这些更改)。

  

我需要使用{{1}}(强制推送)吗?

不,你不需要在这里强行推送(不需要{{1}}),因为在这种情况下,推送只是一个快进的推送。