簡體   English   中英

如何在Git中線性化“碎片化”的合並歷史?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM