[英]How to squash the old commit and a recent merge commit
當我一個接一個地做出兩件承諾時,我可以用它們壓扁它們
git rebase -i origin/{branch}~1 {branch}
但現在提交的順序是不同的:
現在git log和我的pull請求顯示我的原始提交和合並提交。 但是上面的rebase命令只顯示來自上游的其他提交,並且由於某種原因沒有我的合並提交。
那么如果git rebase甚至沒有顯示它們怎么能壓縮提交呢?
Rebase通常完全刪除合並提交。 原因很簡單:rebase 復制提交,將其轉換為更改,然后將這些更改應用於新基礎 (因此名稱為“re-base”)。 復制后,您“放棄”原始提交,轉而使用閃亮的新副本:
... <--B <--C <-- master
\
D <--E <--F <-- branch
變為:
... <--B <--C <-- master
\
D' <--E' <--F' <-- branch
其中D'
是的閃閃發光的新副本, D
,等等。 換句話說,rebase會收集一系列提交,例如DEF
,將它們變成“從B
到D
的不同之處,從D
到E
什么不同,以及從E
到F
什么不同.Git然后可以對C
應用相同的更改制作D'
,然后將D
-vs- E
更改重新應用於D'
,依此類推。
修改任何已發布(推送)的提交通常是不明智的,除非您與共享該推送到存儲庫的所有其他人預先安排此提交,以便他們理解並能夠與此協調。 從本質上講,他們 - 其他人 - 正在使用你放棄的承諾,轉而支持閃亮的新承諾; 因此他們也必須放棄那些有利於閃亮新事物的承諾,否則它們會帶回舊/臟/破碎/任何提交。
合並的提交沒有明確的辦法變成改變,因為他們有兩個以前(或父 )款,而不是只有一個,並且在合並的變化是合並分別來自父母的變化的結果。 (可以創建一個新的合並,但這非常棘手,將它與普通的交互式rebase結合起來是不安全的。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.