2012-09-09 56 views
2

我的問題類似於git remove commit from a merge,但我不能按照那裏建議的指示,因爲我的存儲庫的歷史有點不同。git(集線器)從合併中刪除提交

我正在開發github上的開源庫。幾個月後,我想更新我的本地存儲庫,我犯了一個無用的合併提交。歷史如下:

* commit 3d542ddb64e6474a10dfface24defc69b713a295 
| Author: TD 
| 
|  fixed typo in dependency_injection/compilation chapter 
|  
* commit 34db3b8c08e5c5d3be4021076716ed90187fe5fb 
|\ Merge: b8b73fb 7cc08f4 
| | Author: TD 
| | 
| |  Merge remote-tracking branch 'upstream/master' 
| | 
| * commit 7cc08f476b7ac5610b1eb5b5db5182d18e35a9e9 
| | Author: RW 
| | 
| |  [#1654] Tweaking comments 
... 

應該只有一個提交與我的小變化,但有兩個。我只是想刪除34db3b8c0 ...合併提交。我知道我應該嘗試互動式底座,但我不知道如何設置它。當我嘗試

git rebase -i HEAD~2 

我得到了巨大的過去的名單承諾:

pick bbfbddb Add the new "strict_requirements" 
pick 31bb8a9 [reference] Tweaking note about strict_requirements 
pick fb4d621 [Cookbook][Extension] Fixed typo in functions name 
pick d8d1d86 Fixing index typo 
# lots and lots of commits in the history here 
pick c734436 Fixed indentation. 
pick ca8d884 Update cookbook/logging/channels_handlers.rst 
pick 7cc08f4 [#1654] Tweaking comments in channel handlers doc to point to reference 
pick 3d542dd fixed typo in dependency_injection/compilation chapter: should be contAiner instead of continer 

# Rebase b8b73fb..3d542dd onto b8b73fb 
# 
# Commands: 
... 

但是當我嘗試:

git rebase -i HEAD~1 

(想有一個較短的列表)我只得到一個承諾:

pick 3d542dd fixed typo in dependency_injection/compilation chapter: should be contAiner instead of continer 

就我所知,我應該壓縮合並提交34db3b8c08 ...使用交互式底座,對吧?

感謝您的任何幫助。

回答

3

嘗試git rebase upstream/master。所以,你的提交將被應用在遠程主機上。合併提交將被廢棄爲無用。

2

最簡單的方法是你的分公司負責人重置爲上游HEAD和強制推到原點

git reset --hard HEAD upstream/master 

git push -f origin master 
+0

'push -f'是不好的做法。 – kan

+1

這是,但這個問題是關於重寫歷史,所以它的強制執行 – Maks3w

+1

我沒有看到他提到的推動問題。它尋找我,他想在推之前覆蓋當地的歷史。 – kan

3

你想要做的是採取一切,因爲合併的變化,底墊放到提交在合併之前:

git rebase --onto 34db3b8^ 34db3b8 master 

其中「34db3b8」是合併提交你想消除,而「大師」是要從消除它的分支。這將重寫分支,跳過合併提交併重播後面的所有內容。