2011-08-31 33 views
1

我有一個分支mybranch,它有六個提交併來自提交C。我想創建一個新的分支,也基於提交C,它有效地包含mybranch提交的所有提交,並壓縮爲一個提交。最簡單的方法是什麼?如何創建一個包含從另一個分支到一個節點的所有提交的同級分支?

我需要做到這一點,因爲「在你git-push之前壓扁」的口頭禪。對於新的分支,我不希望在推送到遠程服務器的歷史記錄中提及mybranch。我想創建一個全新分支的原因是因爲我想保留mybranch中的所有提交以供參考。

回答

4

爲什麼只推擠壓扁的提交?這聽起來很瘋狂(和錯誤)。

但是,爲了回答你的問題:

git checkout -b newbranch # checkout new branch 
git reset --soft C# move to commit C 
git add -u # add all changes to index 
git commit -m 'squashed commit' 

另一種可能性是使用rebase -i壁球/修正所有提交到一個單一的一個:

git checkout -b newbranch 
git rebase -i C# now, replace every 'pick' with 'fixup'/'squash' except the first one 

的利益也就是git merge --squash

生成工作樹和索引狀態,就好像發生了真正的合併(exc ept爲合併信息),但不實際提交或移動HEAD,也不記錄$ GIT_DIR/MERGE_HEAD以使下一個git commit命令創建合併提交。這允許您在當前分支上創建一個單獨的提交,其效果與合併另一個分支相同(或者在章魚的情況下更多)。

git checkout -b newbranch C# create newbranch at commit C 
git merge --squash mybranch 
git commit -m 'squashed commit' 
+0

這樣做了,謝謝! – Phillip

相關問題