以下是我的提交:
A B C
C是当前提交。我希望事情在起源上看起来像这样:
A B C A
所以A是我当前的提交,但保留了B和C.我目前克隆了使用C作为当前提交的repo。接下来我需要做些什么才能获得原点?
答案 0 :(得分:3)
提交'B'和'C'是分支历史的渐进状态。要在本地重置为'A'而不丢失'B'或'C',只需在原点上使用新分支:
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
。恢复提交使git bisect
和git rebase
之类的命令更加困难,如果你想重复使用'B'和'C',人类就很难解析历史。
答案 1 :(得分:3)
git revert B C
(这将添加两个提交,但树的状态将与A处的状态一样)