我有這樣的一個分支:如何擠壓分支中的所有合併?
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.
我有這樣的一個分支:如何擠壓分支中的所有合併?
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.
這應該有所斬斷。由於我們是櫻桃選擇提交消息,作者和作者日期將與原始提交相同,包括合併。
或者,你可以從最後的提交信息和作者信息合併,即合併的第二個父母,加入以下行的首要條件之前提交到分支:
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
您能否澄清「刪除添加修改第一個條件」的含義?我在哪裏可以放入'git commit --amend',我什麼時候可以使用它? – robru 2016-09-11 05:34:22
@Robru我修正了一下。我必須在沒有校對的情況下改變它,所以沒有任何意義。現在應該更清楚了。 – 2016-09-12 17:24:10
雖然它有點跛和令人難以置信哈克,你*可以*推這個歷史到一個svn存儲庫,正是這樣做。之後你可以刪除svn信息。 – 2014-10-27 11:46:30
這不僅僅是hacky,它還需要安裝SVN服務器。 – 2014-10-28 18:12:37
Jeah,這不是一個好的解決方案,我只是想完整地提到它。 – 2014-10-28 19:26:24