it-swarm.cn

如何在没有实际合并的情况下测试合并

有没有办法模拟两个分支,当前工作分支和主分支之间的git merge,但没有做任何更改?

当我必须制作git merge时,我经常会遇到冲突。有没有办法先模拟合并?

137
dole doug

我认为有一种方法可以模拟在尝试合并之前会发生什么。但是,如果在进行合并之前确保git status的输出为空,那么继续尝试它是非常安全的。如果您遇到冲突,您可以立即回到以前的状态:

git reset --merge

从git 1.7.4开始,您还可以通过执行以下操作来中止合并:

git merge --abort

(作为 添加该选项的提交消息解释了 ,这是为了与git rebase --abort等一致而添加的。)

113
Mark Longair

您可以使用git merge --no-commit来防止实际提交合并,如果您不喜欢合并的工作方式,只需重置为原始头。

如果你肯定不想完成合并,即使它是快进的(因此根据定义没有冲突),你也可以添加--no-ff

119
Amber

如果我想将主题分支上的更改与主数据库进行比较,我发现执行以下操作最简单,最安全:

git checkout master
git checkout -b trial_merge
git merge topic_branch

完成合并后,很容易看到来自master的合并更改

git diff master

完成后,只需删除trial_merge分支即可

git checkout master
git branch -D trial_merge

这样,主分支永远不会改变。

86
Ian

我用 :

git merge --ff-only

根据 文件

拒绝以非零状态合并和退出,除非当前HEAD已经是最新的,或者合并可以解析为快进。

这不是真正的模拟,因为如果两个分支之间没有冲突,将会有快速合并。但是如果发生冲突,您将被告知并且不会发生任何事情。

4
Ortomala Lokni

我最近能够使用git merge --abort。但是,只有在发生合并冲突时才能使用此选项。如果您确定不想提交,请使用上面提到的其他方法。

4
bean5

为什么不创建一个一次性分支(git checkout -b),并在那里进行测试合并?

3
Mohan S Nayaka

我不确切地知道你的情况是否正确 ,但是你的问题记住了我有时候我会开始一个功能,我会在这些日子里进行多次合并开发。

在这一点上,我失去了对我更改的确切文件的控制权,我只会在我的功能关闭并且我的代码开发时才知道。

在这种情况下,了解您所做的修改(不是合并中的其他修改)的好方法是使用Sourcetree。

您必须单击基础分支上的右键并选择Diff Against Current

Sourcetree's feature to know the diff between two branches 

然后,如果将分支合并到基本分支,sourcetree将显示将合并的所有修改。

Results 

当然,它不会向您展示冲突,但它是合并中的有用工具。

0
Lucas Amorim Silva