是否有任何方法模拟两个分支之间的git合并,当前工作分支和主分支,但不做任何更改?
当我必须进行git合并时,我经常遇到冲突。有没有办法先模拟合并?
是否有任何方法模拟两个分支之间的git合并,当前工作分支和主分支,但不做任何更改?
当我必须进行git合并时,我经常遇到冲突。有没有办法先模拟合并?
当前回答
在尝试合并之前,我认为没有一种方法可以模拟将要发生的事情。但是,如果您在执行合并之前确保git状态的输出为空,那么继续尝试它是相当安全的。如果你遇到冲突,你可以立即回到你之前的状态:
git reset --merge
从git 1.7.4开始,你也可以执行以下操作中止合并:
git merge --abort
(正如添加该选项的提交消息所解释的那样,添加此选项是为了与git rebase——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-tree在内存中合并,并在不触及你的工作目录的情况下打印差异。您甚至可以在不签出分支的情况下测试它。
获取合并差异
首先,这样做是为了确保你的存储库知道所有远程分支:
$ git fetch --all
现在使用这个bash代码片段来看看分支$branch如何合并到$master:
$ branch='feature'
$ git merge-tree $(git merge-base $branch master) master $branch
没有对工作目录或索引进行任何更改。这是一次预演合并。
从输出中选择信息
输出是一个差异。 如果分支已经被合并,它将是空的。
为了发现是否有冲突,grep <<<:
$ git merge-tree $(git merge-base $branch master) master $branch | fgrep '<<<'
要提取冲突差异,使用sed提取<<<和>>>之间的行:
$ git merge-tree $(git merge-base $branch master) master $branch | \
sed -ne '/^\+<<</,/^\+>>>/ p'
特性
如果分支已经合并,则diff为空 使用grep/sed提取冲突信息 使用origin/feature来测试你从未使用过的分支 可以用来看出2个分支是如何分化的
把它添加到你的收藏夹中
获取合并的差异:
Git配置——全局别名。f(){分支="$1";= " $ 2 ";Git merge-base "$branch" "$into"“$into”“$branch”;}; f '
用法:
$ git mergediff <feature-branch> <merge-into>
$ git mergediff feature master
获取合并冲突:
git config——全球别名。mergetest’! f () {git mergediff美元@ | sed -ne "/^+<<</,/^+>>>/ p”;f);”
用法:
$ git mergetest <feature-branch> <merge-into>
$ git mergetest feature master
我已经能够使用git合并-中止,最近。但是,这只能在存在合并冲突时使用。如果你确定你不想提交,那么使用上面提到的其他方法。
在尝试合并之前,我认为没有一种方法可以模拟将要发生的事情。但是,如果您在执行合并之前确保git状态的输出为空,那么继续尝试它是相当安全的。如果你遇到冲突,你可以立即回到你之前的状态:
git reset --merge
从git 1.7.4开始,你也可以执行以下操作中止合并:
git merge --abort
(正如添加该选项的提交消息所解释的那样,添加此选项是为了与git rebase——abort等保持一致。)
我用:
git merge --ff-only
根据文件:
拒绝合并并以非零状态退出,除非当前HEAD已经是最新的,或者合并可以作为快进解决。
这并不是一个真正的模拟,因为在两个分支之间没有冲突的情况下,将会有一个快进合并。但如果发生冲突,你会被告知,什么也不会发生。