2011-09-20 113 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),并在那里做一个测试合并?

相关问题