Amb*_*ber 129
您可以使用git merge --no-commit以防止实际提交合并,如果您不喜欢合并的工作方式,只需重置为原始头.
如果你肯定不想完成合并,即使它是快进的(因此根据定义没有冲突),你也可以添加--no-ff.
Mar*_*air 124
我认为有一种方法可以模拟在尝试合并之前会发生什么.但是,如果git status在进行合并之前确保输出为空,那么继续尝试它是非常安全的.如果您遇到冲突,您可以立即回到以前的状态:
git reset --merge
Run Code Online (Sandbox Code Playgroud)
从git 1.7.4开始,您还可以通过执行以下操作来中止合并:
git merge --abort
Run Code Online (Sandbox Code Playgroud)
(正如添加该选项的提交消息所解释的那样,为了与一致性等添加了此消息git rebase --abort.)
Ian*_*Ian 99
如果我想将主题分支上的更改与主数据库进行比较,我发现执行以下操作最简单,最安全:
git checkout master
git checkout -b trial_merge
git merge topic_branch
Run Code Online (Sandbox Code Playgroud)
完成合并后,很容易看到来自master的合并更改
git diff master
Run Code Online (Sandbox Code Playgroud)
完成后,只需删除trial_merge分支即可
git checkout master
git branch -D trial_merge
Run Code Online (Sandbox Code Playgroud)
这样,主分支永远不会改变.
这是我找到的解决方案:git merge-tree在“内存中”合并并打印差异而不触及您的工作目录。您甚至可以在不检查分支的情况下对其进行测试。
首先,这样做以确保您的存储库知道所有远程分支:
$ git fetch --all
Run Code Online (Sandbox Code Playgroud)
现在用这个bash的片段,看看怎么分公司$branch 将合并到$master:
$ branch='feature'
$ git merge-tree $(git merge-base $branch master) master $branch
Run Code Online (Sandbox Code Playgroud)
不会对您的工作目录或索引进行任何更改。这是一个试运行合并。
输出是一个差异。如果分支已合并,它将为空。
要查找是否存在冲突,请对其进行 grep <<<:
$ git merge-tree $(git merge-base $branch master) master $branch | fgrep '<<<'
Run Code Online (Sandbox Code Playgroud)
$ git merge-tree $(git merge-base $branch master) master $branch | \
sed -ne '/^\+<<</,/^\+>>>/ p'
Run Code Online (Sandbox Code Playgroud)
origin/feature一个你从没合作过的测试分支获取合并的差异:
git config --global alias.mergediff '!f(){ branch="$1" ; 进入=“$2”;git merge-tree $(git merge-base "$branch" "$into") "$into" "$branch" ; };F '
用法:
$ git mergediff <feature-branch> <merge-into>
$ git mergediff feature master
Run Code Online (Sandbox Code Playgroud)
获取合并冲突:
git config --global alias.mergetest '!f(){ git mergediff $@ | sed -ne "/^+<<</,/^+>>>/ p" ; };F '
用法:
$ git mergetest <feature-branch> <merge-into>
$ git mergetest feature master
Run Code Online (Sandbox Code Playgroud)
我用 :
git merge --ff-only
Run Code Online (Sandbox Code Playgroud)
根据文档:
拒绝合并并以非零状态退出,除非当前 HEAD 已经是最新的或者合并可以解决为快进。
这不是真正的模拟,因为在两个分支之间没有冲突的情况下会进行快进合并。但如果发生冲突,您会收到通知,并且不会发生任何事情。