2013-07-17 196 views
0

我一直在一個分支工作,比如master。更改已經推送到遠程存儲庫。我的歷史是這樣的:恢復分支git

*----*----*----* master 

然後我意識到我可能做錯事,並希望從一個不同的方法開始。我通過創建一個新的分支做到這一點:

*----*----*----* master 
    \ 
     *----*----* different-approach 

一些新提交後,我決定,新的方法效果比在主分支好,所以我想用,從現在起就master分支。所以我做了合併:

git checkout master 
git merge different-approach 

如果有任何衝突,我總是選擇從different-approach合併版本。問題在於,對於某些文件沒有衝突,所以git會自動合併,留下來自master分支的壞東西。

我能在這種情況下做什麼?似乎沒有辦法強制手動合併所有git文件。當然,我可以將庫克隆到不同的目錄,並在提交合並之前將其中的所有文件複製到原始目錄。但是,沒有一種更簡單,更簡單的方法來做到這一點?

回答

2

通過恢復不需要的提交來修復它。

// Revert all commits in master one-by-one 
$ git checkout master 
$ git revert --no-edit different-approach..master 
$ git merge different-approach 

// Revert all commits in master at once 
$ git checkout master 
$ git revert --no-commit different-approach..master 
$ git commit -m "Revert foo" 
$ git merge different-approach 
+0

如果其他人將更改推送給主人,這可能會導致問題。他們的承諾也會恢復。 – gtrig

+0

那麼,我期望作者能夠運行任何日誌查看器來確認他已經恢復了什麼。 –

-1

如果你想完全忽略master的變化不是different-approach您可以:

git checkout master 
git reset --hard different-approach 

警告,這將徹底消滅變化對master不是different-approach

+0

我的猜測是,如果主人已經被推動,它將無法正常工作。至少它不應該。這就是爲什麼我需要合併。 – petersohn

+0

您是否想要更改遠程主設備?如果是'git reset --hard different-approach'後,你可以'git push -f'。警告這會在遙控器上重寫歷史記錄,以至於以前的更改似乎從未發生過。 – cforbish