2014-10-26 83 views
3

我有這樣的一個分支:如何擠壓分支中的所有合併?

A---B---B1---B2---D---E---E1---E2---G---H 
    \   / \   /
     C1---C2---’  F1---F2---’ 

我想重寫它,讓它像這樣:

A---B---B1---B2---D---E---E1---E2---G---H 

這意味着,摒棄所有的合併。

分支很長。這如何自動完成?

編輯

這不是歷史的線性化。我想壓扁所有合併,如D和G.

+0

雖然它有點跛和令人難以置信哈克,你*可以*推這個歷史到一個svn存儲庫,正是這樣做。之後你可以刪除svn信息。 – 2014-10-27 11:46:30

+0

這不僅僅是hacky,它還需要安裝SVN服務器。 – 2014-10-28 18:12:37

+0

Jeah,這不是一個好的解決方案,我只是想完整地提到它。 – 2014-10-28 19:26:24

回答

2

這應該有所斬斷。由於我們是櫻桃選擇提交消息,作者和作者日期將與原始提交相同,包括合併。

或者,你可以從最後的提交信息和作者信息合併,即合併的第二個父母,加入以下行的首要條件之前提交到分支:

git commit --amend -C $(git rev-parse $rev^2) 

如果你經常這樣做,這些命令可以很容易地轉換成腳本。

結帳基地承諾(以遊離狀態):

git checkout A~0 

櫻桃採摘所有提交:

for rev in $(git rev-list HEAD..branch-name --first-parent --reverse) 
do 
    if [[ $(git show --summary --format="%P" $rev | wc -w) -gt 1 ]] 
    then 
     git cherry-pick $rev --mainline 1 
     # git commit --amend -C $(git rev-parse $rev^2) 
    else 
     git cherry-pick $rev 
    fi 
done 

部隊老枝和結帳:

git branch -f branch-name HEAD 
git checkout branch-name 
+0

您能否澄清「刪除添加修改第一個條件」的含義?我在哪裏可以放入'git commit --amend',我什麼時候可以使用它? – robru 2016-09-11 05:34:22

+0

@Robru我修正了一下。我必須在沒有校對的情況下改變它,所以沒有任何意義。現在應該更清楚了。 – 2016-09-12 17:24:10

相關問題