2013-06-27 33 views
19

我們的一個常見的開發流程是結賬分支b,提交一堆,然後壓縮所有這些提交到一個(仍然在b)。Git壓扁所有提交分支沒有衝突

然而,在rebase -i過程壁球所有提交,經常存在衝突的多個步驟。

我基本上是想改變爲一個提交的分支代表庫在決賽時的狀態提交上b

我已經做了一些搜索,但我沒有什麼發現我在找。我不想merge --squash,因爲我們想在合併前測試壓扁的特徵分支。

+0

可能重複的[Git中,就是合併--squash和底墊之間的區別?(http://stackoverflow.com/questions/2427238/in-git-what-is-the-difference-between-merge-squash-和REBA se) –

+0

從這個問題 - 我不希望'G'在'stable'中,我希望它仍然在功能分支上。不知道我是否錯過了什麼 –

+0

難道你不能只是櫻桃選擇'G'嗎? –

回答

40

如果您不需要提交信息,那麼你可以只是做一個軟復位。然後文件保持原樣,當您提交時,此提交將在您重置爲的提交之上。

要查找的承諾重置爲:

git merge-base HEAD BRANCH_YOU_BRANCHED_FROM 

然後

git reset --soft COMMIT_HASH 

然後重新工藝的承諾,也許是:

git commit -am 'This is the new re-created one commit' 
+0

聰明!我喜歡它 –

+0

這太酷了。 –

5

這是simlar從答案Rasmus,但分爲三個步驟,應始終工作:

$ git merge feature1 
$ git reset --soft [email protected]{1} 
$ git commit -c feature1 

說明:

  1. 合併和解決衝突
  2. 不斷變化分期,但重置老臉
  3. 承諾使用的所有更改提交從功能分支信息和作者最新提交