簡體   English   中英

如何使用git rebase使我的提交歷史記錄有效?

[英]How can I make my commit history work with git rebase?

我的歷史看起來像這樣

H o updated ctools, ds
G M─┐ merged module file
F │ o find page 
E o │ work on download restriction
D o─┘ Report downloading/emailing WIP
C o migration: find and replace URLs throughout notes
B o various local things
A o initial commit

A后面,A來自一個遠程主人。 現在遙控器已經移動了,我想使用git rebase更新我的歷史記錄,以便在最新的遠程更改之上。

所有這些提交都在不在遠程主服務器上的代碼中,但是git rebase會讓我失望,因為它似乎不理解如何處理D:G :在G處合並的side分支。 Git rebase嘗試按順序應用它們,沒有合並,即ABCDEF H...F不適用於E。 我計划需要多次改造以使我的代碼保持在最新原點的開發之上,所以我想要一個持久的解決方案。

我怎么能告訴git在G上找到沖突的答案? 或者我怎樣才能做其他事情,以便git rebase能夠回復提交? 如果讓事情變得更容易話,我很樂意將D:G壓成D'

Git與master合並是您方案中的最佳選擇,因為rebase不是為合並提交而設計的(G是您的問題)。 但是如果你真的想和git rebase -p沒有產生預期的結果,你可以:

  1. rebase AE(然后是A'-E')
  2. 在D'上單獨重新應用F(通過cherrypick或其他方式)成為F'
  3. 合並E'和F'成為G'
  4. 在G'之上的cherrypick H

這里首選合並的其他原因:

  1. 你試圖改變的那些提交可能已經屬於遙控器上的某個功能分支,將它們中的很多設備重新綁定到另一個遠程分支上只會導致大量的重復提交,這可能會讓其他人感到困惑。

  2. 如果這些提交僅在您的本地分支中,通過變基(但不一定是推動)它們,您實際上是“扣留”它們直到它們最終被推或合並。 這可能會對其他人造成破壞性,因為它看起來像是在很短的時間內突然出現的大量提交; 合並應該是工作流程中的常規活動。

也就是說,如果您打算出於任何原因(例如使用git-svn)定期進行rebase,最好的方法是為您希望重新設置和/或將它們限制為少量的提交維護線性歷史記錄。 對於涉及合並的一系列提交,這些合並需要從前到后折疊(如迷你rebase)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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