2012-08-27 140 views
1

這裏是我的提交:我該如何使用git提交當前的主提交?

A B C

其中C是當前提交。我想要的東西看起來像這樣原籍:

A B C A

所以是我目前的承諾,但B和C被保留。我目前已經用C作爲當前提交克隆了repo。接下來我需要做些什麼來獲得我想要的東西?

回答

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」將被保留在「主」,這樣你就可以git cherry-pick <commit_of_B_or_C>git merge master沒有麻煩。

如果你真的想要「B」和C」,但希望復位‘高手’到‘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',那麼人類很難分析歷史。

+0

如何推動新的分支原籍高手? –

+0

現在,這是一個不同的問題......你可以用'git push origin -f new-branch:master'強行覆蓋它,或者在'master'上發出'git reset --hard A'並強行推送它(再次, git push -f origin master'),但兩者都有後果,應該予以考慮。 – Christopher

3

git revert B C

(這將增加兩次提交,但你的樹的狀態將是因爲它是在A)

相關問題