[英]How to linearize “splintered” merging history in Git?
我已經閱讀了git書的基礎知識,試圖將紅色的分支與合並的藍色分支線性化。 為了更輕松地查看歷史記錄,我嘗試僅具有一個分支而沒有任何路口。 我必須做哪些選擇,什么是最好的?
這個答案建議reset --soft
,但是這里的演示假定自合並以來它增長了很多。 將分支藍色更改在af
之前或最好在9c
提交之后添加到紅色是可以的。
* 5356e62 vimdiff solved
* c1ccf86 red forward
* 51fbd33 Merge branch 'blue' into red
|\
| * 96575dc new file
| * 1d7f531 some line and blue branch 3
* | 9cc3291 new file
* | 92569c6 another commit
* | f8d3ab2 blue branch 3
|/
* af8b651 init
警告 : 所有執行您要求的方法都會將ref“后退”(有效刪除某些提交); 如果這些提交已與其他開發人員共享,則會產生問題。 請參閱git rebase
文檔,以了解從上游rebase恢復的知識,並且了解到,雖然這是根據rebase記錄的,但它適用於所有歷史記錄編輯。
在某種程度上, git reset --soft
是上一個問題的合理答案,在這里也同樣合理。
git checkout 5356e62
git reset --soft 9cc3291
現在從1d7f531開始的所有更改都顯示為分段更改,因此
git commit
創建一個新提交,將舊提交“壓縮”為一個新提交。
此時,如果您有一個分支指向96575dc,則該分支似乎未合並。 OTOH如果父分支以前是唯一可以達到96575dc的分支,則現在無法訪問96575dc;否則,請參見OTOH。 但是如果您不需要詳細的歷史記錄也可以,因為相關的更改在您的新提交中。
一個更通用的解決方案是merge --squash
,而更通用的解決方案是rebase --interactive
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.