簡體   English   中英

如何壓縮舊提交和最近的合並提交

[英]How to squash the old commit and a recent merge commit

當我一個接一個地做出兩件承諾時,我可以用它們壓扁它們

git rebase -i origin/{branch}~1 {branch}

但現在提交的順序是不同的:

  1. 我的承諾
  2. 與上游合並:合並github.com的分支'master':...
  3. 這被推到了原點。

現在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 ,將它們變成“從BD的不同之處,從DE什么不同,以及從EF什么不同.Git然后可以對C應用相同的更改制作D' ,然后將D -vs- E更改重新應用於D' ,依此類推。

修改任何已發布(推送)的提交通常是不明智的,除非您與共享該推送到存儲庫的所有其他人預先安排此提交,以便他們理解並能夠與此協調。 從本質上講,他們 - 其他人 - 正在使用你放棄的承諾,轉而支持閃亮的新承諾; 因此他們必須放棄那些有利於閃亮新事物的承諾,否則它們會帶回舊/臟/破碎/任何提交。

合並的提交沒有明確的辦法變成改變,因為他們有兩個以前(或 )款,而不是只有一個,並且合並的變化是合並分別來自父母的變化的結果。 (可以創建一個新的合並,但這非常棘手,將它與普通的交互式rebase結合起來是不安全的。)

暫無
暫無

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

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