【发布时间】:2012-05-07 00:59:15
【问题描述】:
我已将一个 dev 分支(具有恒定的,有时是不稳定的更改)合并到我们的 master 分支(我们存储已发布的稳定代码的地方)。我想将 master 分支恢复到之前的状态,就像从未发生过与 dev 分支的合并一样(并且当将来我们合并 dev 分支时,我们现在将丢弃的所有更改都将“再次”合并)。
这是 master 分支的当前状态,我希望它在 HEAD 处具有“professional-1.1.2”提交/标记。
我试过了:
$ git revert -n professional-1.1.2..HEAD
fatal: Commit 9167e846a387c793edbc089c7ab6bd9eb8260456 is a merge but no -m option was given.
$ git revert -n -m 1 professional-1.1.2..HEAD
fatal: Mainline was specified but commit 380169097f35d07466640bc0db1b639278cd25fa is not a merge.
$ git revert -n -m 2 professional-1.1.2..HEAD
fatal: Mainline was specified but commit 380169097f35d07466640bc0db1b639278cd25fa is not a merge.
经过一番研究,我认为更好的选择是使用git reset --hard professional-1.1.2 和git push --force 作为Git: How to ignore fast forward and revert origin [branch] to earlier commit? 或reverting push'd git commit 的答案。其他开发人员在同一个办公室,他们不应该向 master 提交任何东西(我也不应该,但是......是的,我们没有每个分支的权限),所以告诉他们并做任何事情都不是什么大问题需要采取行动。
所以最后的问题是:git revert something 还是git reset --hard <TAG> && git push --force?如果git revert,我应该使用哪个命令行?
【问题讨论】:
-
Jefromi 在stackoverflow.com/questions/3556501/… 中给出的答案可能会对您有所帮助。
-
@vpatil 在我的情况下使用
git reset --hard比使用git revert更好吗? -
是的,我认为是这样,因为 revert 创建了一个新的提交,它取消了最后一次提交。我肯定会建议使用重置。
-
@CarlosCampderrós 唯一的规则是永远不要覆盖公共存储库中的历史记录。如果它是您的私有存储库,您可以为所欲为。但是在公共存储库中,如果您重写历史记录,就会破坏所有已经下载您正在重写的部分的存储库。
-
@Let_Me_Be 是的,我知道。我真的不喜欢这样做,但最后我认为对于我目前的情况是最好的选择,因为环境是可控的,没有人应该对 master 分支中的代码什么都不做。
标签: git git-reset git-revert