2017-03-02 52 views
0

通常我想壓縮垃圾分支中的幾十個提交,以在臨時服務器上測試出所有內容。特別是在使用具有問題自動關閉功能(如bitbucket)的問題跟蹤器時 - 我不想關閉當時提交消息中提到的問題,所以我需要壓扁。簡單的方法來壓縮多個提交?

必須有一些事情比單獨更改rebase或單獨更改每一條線更簡單,或者必須知道多少提交前是壁球的目標。

像「壁球的一切,直到這犯了哈希XXXXXX」

回答

3

是的,當你使用互動模式重訂,你可以通過標記它們壁球提交被壓扁。參見:

  1. https://robots.thoughtbot.com/git-interactive-rebase-squash-amend-rewriting-history#squash-commits-together
  2. http://gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html

您也可以嘗試git merge --squash這是一種更直接的方式和東西,你正在尋找 - https://stackoverflow.com/a/5190323/7274758

讓我們說你有以下提交集合

O - O - L1 - F1 - F2 - F3a - F3b - F4 - .... - FN 
     |  |        \_ master, HEAD 
     |  \_ Fix for Issue 1 and so on. 
     | 
     \_ Last Tested. You would like to squash all from this point 
  1. 重置頭L1 git reset --hard L1

    O - O - L1 - F1 - F2 - F3a - F3b - F4 - .... - FN 
         |  |         
         |  \_ Fix for Issue 1 and so on. 
         | 
         \_ (Last Tested), master, HEAD 
    
  2. 現在壁球一切,直到前面的頭(即FN)git merge --squash [email protected]{1}

    O - O - L1 - F1 - F2 - F3a - F3b - F4 - .... - FN 
         | \ 
         | \_ 0 
         | 
         \_ (Last Tested), master, HEAD 
    
  3. 執行提交 - git commit這將承諾從F1的所有更改到FN(SF1_FN)

    O - O - L1 - SF1_FN 
          | 
          \_ master, HEAD 
    
0
git checkout --orphan wip 
git commit 

如果你只是測試內容,你不需要祖先。

2

最自動的方法是使用git merge --squash。你是否應該使用Libin Varghese的答案或者這個答案可能取決於你是否打算保留原始提交。如果不是,他說明的是直截了當的。但如果是這樣......

如果你有

A --- B --- C --- D <--(branch) 

,你想壁球BCD,你可以做

git checkout B^ 
git checkout -b squashed_branch 
git merge --squash branch 
git commit 

,現在你必須

A --- B --- C --- D <--(branch) 
    \ 
    BCD <--(squashed_branch) 
+0

希望我能接受這兩個答案,但是,我想保留原始提交。我想@Libin Varghese也考慮過這個,並且意在在分支到垃圾分支之後做些什麼。 – rzb

相關問題