如何使用git进行旧的提交当前主提交?

时间:2012-08-27 18:08:42

标签: git github

以下是我的提交:

A B C

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

A B C A

所以A是我当前的提交,但保留了B和C.我目前克隆了使用C作为当前提交的repo。接下来我需要做些什么才能获得原点?

2 个答案:

答案 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 bisectgit rebase之类的命令更加困难,如果你想重复使用'B'和'C',人类就很难解析历史。

答案 1 :(得分:3)

git revert B C

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