2013-12-22 62 views
1

兩個分支 - masterfeature - 與git merge --no-ff合併。後來feature分支被刪除。樹看起來像這樣:git合併後清理--no-ff

*  (master) A new feature added to the master 
|\ 
| *  yet another small commit 
| *  another small commit 
| *  small commit 
|/ 
*  Master before the feature was added 

我想清理這些小提交從樹上所以它看起來像:

*  (master) A new feature added to the master 
*  Master before the feature was added 

如何做到這一點?當地的回購尚未推出。

+1

'git log --graph --decorate --pretty = oneline --abbrev-commit --all' –

回答

4

我會做

git checkout master 
git reset --soft <HASH of commit "Master before the feature was added"> 
git commit -m "A new feature added to the master" 

另外,您可以使用

git commit -c ORIG_HEAD 

從原始合併重複提交信息承諾。

+0

不錯的一個。我想知道在我的史詩重置和合並解決方案與你的快速技巧之間的git內部有任何不同嗎? – janisz

+0

我認爲我們應該得到相同的結果。不過,您的解決方案保留了功能分支。 –

+2

使用原始合併提交ID添加'-c'(或者甚至是'-C')來複制日誌消息(以及''-C',作者以及)。如果您創建一個臨時名稱(例如之後再次刪除的標籤)以掛起merge-commit-ID,這會更容易一些。 @janisz:在內部,壓縮合並必須重複整個合併過程,而此方法只是使用常規合併的結果。壓縮合並的頂層樹將與正則合併的頂層樹完全匹配(假設任何衝突(如果有的話)都以相同的方式處理),所以結果是相同的。 – torek

2

讓我們假設你的回購看起來像這樣(我需要提交的SHA)

* 82daefb - (HEAD, master) A new feature added to the master (15 seconds ago) 
|\ 
| * 6e156b0 - yet another small commit (84 seconds ago) 
| * ccc4753 - another small commit (2 minutes ago) 
| * e76a659 - small commit (2 minutes ago) 
|/ 
* 3041679 - Master before the feature was added (2 minutes ago) 
  1. 恢復您的特性分支 git checkout -b feature && git reset --hard 6e156b0
  2. 復位微波激射到 git co master && git reset --hard 3041679
  3. 合併你的分支git merge feature --squash
  4. 提交合並git commit -m "A new feature added to the master"

最後你的樹看起來就像

* 6bf734c - (HEAD, master) A new feature added to the master (68 seconds ago) 
* 3041679 - Master before the feature was added (5 minutes ago)