1

这是我的提交:

美国广播公司

C 是当前提交。我希望事情在起源上看起来像这样:

ABCA

所以 A 是我当前的提交,但 B 和 C 被保留。我目前有克隆的存储库,其中 C 是当前提交。接下来我需要做什么才能获得我想要的原点?

4

2 回答 2

3

提交“B”和“C”是分支历史的渐进状态。要在不丢失本地“B”或“C”的情况下重置为“A”,只需在原点上使用新分支:

git checkout -B new-branch master
git reset --hard <A_commit_hash>
git push origin new-branch

'B' 和 'C' 将保留在 'master' 上,所以你可以git cherry-pick <commit_of_B_or_C>git merge master没有麻烦。

如果你真的想要'B'和C',但想将'master'重置为'A',并考虑过强行覆盖遥控器的后果:

git branch archived-master master ;# create 'archived-master' branch
git reset --hard A ;# reset master to 'A' state
git push -f origin master ;# overwrite remote's master

这将在 'archived-master' 分支上本地保存 'B' 和 'C'。

我会避免git revert这样做。还原提交使命令变得更加困难,如果你想重用“B”和“C”,人类就更难解析历史了git bisectgit rebase

于 2012-08-27T18:11:45.453 回答
3

git revert B C

(这将添加两个提交,但树的状态将与 A 处的状态相同)

于 2012-08-27T18:13:55.663 回答