关于git:将推送分支恢复为具体提交

Revert pushed branch to a concrete commit

我已经将一个dev分支(具有持续的、有时是不稳定的更改)合并到了我们的主分支(我们在这里存储发布的、稳定的代码)。我希望将主分支恢复到以前的状态,就像从未发生过与dev分支的合并一样(并且将来当我们合并dev分支时,我们现在要放弃的所有更改都将"再次"合并)。

这是主分支的当前状态,我希望它的头部有"professional-1.1.2"提交/标记。

status of the master branch

我尝试过:

1
2
3
4
5
6
$ 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.2git push --force作为对git的回答:如何忽略快进并将原点(分支)恢复为较早的提交?或者恢复push'd git commit。其他开发人员在同一个办公室,他们不应该向master提交任何内容(我也不应该这样做,但是……是的,我们没有每个分支的权限),所以告诉他们并执行任何需要的操作不是一个大问题。

所以最后的问题是:git revert something还是git reset --hard &git push --force?如果是git revert,我应该使用哪个命令行?


如果你真的想把EDOCX1的状态变成EDOCX1的状态,那么,当你避免重写历史和力量推进时,你就可以创建一个新的硕士学位委员会,代表项目的同样状况,如EDOCX1〕〔5〕。你可以采取以下步骤:

1
2
3
4
5
6
7
8
9
10
11
12
13
# Check that"git status" is clean, since the steps that follow will throw
# way uncommitted changes:
git status

# Set the index (staging area) to be as it was at professional-1.1.2:
git read-tree professional-1.1.2

# Create a commit based on that index:
git commit -m"Reverting to the state at professional-1.1.2"

# Your working tree will still be as it was when you started, so
# you'll want to reset that to the new commit:
git reset --hard

作为另一种选择,你可以遵循查尔斯·贝利在这一答复中提出的步伐,他完成了同样的事情,但我认为,这一步伐越来越模糊(即使我建议的步伐涉及到"Plumbing"Command git read-tree)。


你父母想要回复的具体选择

所以你想要EDOCX1或EDOCX1或EDOCX1


如果你是一个黑暗的人(从上流颠覆中复苏可能是所有其他承诺的必要条件)

ZZU1