如何在没有实际合并的情况下测试合并
在两个分支之间模拟git merge
是否有任何方法,即当前工作分支和主设备,但不作任何更改?如何在没有实际合并的情况下测试合并
当我必须做出git merge
时,我经常发生冲突。有没有什么方法可以先模拟合并?
我不认为有一种方法来模拟将发生什么,直到你尝试合并。但是,如果在合并之前确保git status
的输出为空,那么继续尝试就很安全。如果你得到冲突,你可以立即回到你之前是在州:
git reset --merge
由于git的1.7.4,你也可以通过做中止合并:
git merge --abort
(如the commit message that added that option explains,这是为了与git rebase --abort
等一致而添加的。)
@Amber的答案正在回答正在问什么“如何模拟合并”。使用'--no-commit'在我看来更容易 – samirahmed
@samirahmed:@Amber更真实地回答了这个问题,当然,虽然用'--no-commit'你仍然在改变索引和工作树,并不完全是“没有做任何改变”:)我的观点是,当人们提出这样的问题时,通常是因为他们没有意识到查看合并过程的最佳方式是仅仅检查merge_,通常是因为他们没有意识到如果事实证明存在问题,回到之前的状态是多么容易。 –
我不知道这是否被添加到了最新版本的git中,但在文档(1.8.4)中,它声明“'git merge --abort'相当于'git reset --merge',当MERGE_HEAD '存在“,所以更容易记住:) –
最近我已经能够使用git merge --abort
。但是,只有在合并冲突时才能使用。如果你确定你不想提交,那么使用上面提到的其他方法。
如果我想一个主题分支主比较的变化,我觉得最简单,最安全的做到以下几点:
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
这样,主分支从不改变。
我用:
根据git merge --ff-only
拒绝合并,并与非零状态退出,除非当前HEAD已经启动最新或合并能被解决为快进。
这不是一个真正的模拟,因为在两个分支之间没有冲突的情况下会有快进合并。但是如果发生冲突,您会收到通知,并且不会发生任何事情。
为什么不只是创建一次性分支(git checkout -b),并在那里做一个测试合并?
另请参阅http:// stackoverflow。com/questions/501407/is-there-a-git-merge-dry-run-option –
[是否有git-merge --dry-run选项?](http://stackoverflow.com/questions/501407/is-there-a-git-merge-dry-run-option) –