2011-09-20 114 views
103

在兩個分支之間模擬git merge是否有任何方法,即當前工作分支和主設備,但不作任何更改?如何在沒有實際合併的情況下測試合併

當我必須做出git merge時,我經常發生衝突。有沒有什麼方法可以先模擬合併?

+2

另請參閱http:// stackoverflow。com/questions/501407/is-there-a-git-merge-dry-run-option –

+1

[是否有git-merge --dry-run選項?](http://stackoverflow.com/questions/501407/is-there-a-git-merge-dry-run-option) –

回答

91

我不認爲有一種方法來模擬將發生什麼,直到你嘗試合併。但是,如果在合併之前確保git status的輸出爲空,那麼繼續嘗試就很安全。如果你得到衝突,你可以立即回到你之前是在州:

git reset --merge 

由於git的1.7.4,你也可以通過做中止合併:

git merge --abort 

(如the commit message that added that option explains,這是爲了與git rebase --abort等一致而添加的。)

+2

@Amber的答案正在回答正在問什麼「如何模擬合併」。使用'--no-commit'在我看來更容易 – samirahmed

+8

@samirahmed:@Amber更真實地回答了這個問題,當然,雖然用'--no-commit'你仍然在改變索引和工作樹,並不完全是「沒有做任何改變」:)我的觀點是,當人們提出這樣的問題時,通常是因爲他們沒有意識到查看合併過程的最佳方式是僅僅檢查merge_,通常是因爲他們沒有意識到如果事實證明存在問題,回到之前的狀態是多麼容易。 –

+2

我不知道這是否被添加到了最新版本的git中,但在文檔(1.8.4)中,它聲明「'git merge --abort'相當於'git reset --merge',當MERGE_HEAD '存在「,所以更容易記住:) –

91

您可以使用git merge --no-commit來防止合併實際上被提交,並且如果您不喜歡合併如何工作,只需重置爲原始頭。

如果您絕對不想完成合並,即使它是快進(因此按照定義沒有衝突),也可以添加--no-ff

+0

我不認爲'git merge --abort'存在 - 也許你的意思是'git reset --merge'? –

+0

Nah,我只是忘記了不同於'rebase','git merge'沒有'--abort'。 – Amber

+5

我也會用'--no-ff'。防止發生合併。 – Andy

3

最近我已經能夠使用git merge --abort。但是,只有在合併衝突時才能使用。如果你確定你不想提交,那麼使用上面提到的其他方法。

66

如果我想一個主題分支主比較的變化,我覺得最簡單,最安全的做到以下幾點:

git checkout master 
git checkout -b trial_merge 
git merge topic_branch 

完成合並後,很容易就看到主的綜合變化

git diff master 

完成後,只需刪除trial_merge分支

git checkout master 
git branch -D trial_merge 

這樣,主分支從不改變。

+0

好主意。謝謝。 – djangofan

+0

這對我很好用! – user1176783

+0

好的和安全的策略,謝謝! – Tol182

1

我用:

根據
git merge --ff-only 

documentation

拒絕合併,並與非零狀態退出,除非當前HEAD已經啓動最新或合併能被解決爲快進。

這不是一個真正的模擬,因爲在兩個分支之間沒有衝突的情況下會有快進合併。但是如果發生衝突,您會收到通知,並且不會發生任何事情。

1

爲什麼不只是創建一次性分支(git checkout -b),並在那裏做一個測試合併?

相關問題