這裏是我的提交:我該如何使用git提交當前的主提交?
A B C
其中C是當前提交。我想要的東西看起來像這樣原籍:
A B C A
所以是我目前的承諾,但B和C被保留。我目前已經用C作爲當前提交克隆了repo。接下來我需要做些什麼來獲得我想要的東西?
這裏是我的提交:我該如何使用git提交當前的主提交?
A B C
其中C是當前提交。我想要的東西看起來像這樣原籍:
A B C A
所以是我目前的承諾,但B和C被保留。我目前已經用C作爲當前提交克隆了repo。接下來我需要做些什麼來獲得我想要的東西?
提交'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 bisect
和git rebase
這樣的命令更加困難,並且如果您想重複使用'B'和'C',那麼人類很難分析歷史。
git revert B C
(這將增加兩次提交,但你的樹的狀態將是因爲它是在A)
如何推動新的分支原籍高手? –
現在,這是一個不同的問題......你可以用'git push origin -f new-branch:master'強行覆蓋它,或者在'master'上發出'git reset --hard A'並強行推送它(再次, git push -f origin master'),但兩者都有後果,應該予以考慮。 – Christopher