这是我的提交:
美国广播公司
C 是当前提交。我希望事情在起源上看起来像这样:
ABCA
所以 A 是我当前的提交,但 B 和 C 被保留。我目前有克隆的存储库,其中 C 是当前提交。接下来我需要做什么才能获得我想要的原点?
提交“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 bisect
。git rebase
git revert B C
(这将添加两个提交,但树的状态将与 A 处的状态相同)