mip*_*adi 751
如前所述,传入--no-commit标志,但为了避免快进提交,也传入--no-ff,如下所示:
$ git merge --no-commit --no-ff $BRANCH
Run Code Online (Sandbox Code Playgroud)
要检查分阶段的变化:
$ git diff --cached
Run Code Online (Sandbox Code Playgroud)
您可以撤消合并,即使它是快进合并:
$ git merge --abort
Run Code Online (Sandbox Code Playgroud)
小智 223
我只需要实现一个自动查找存储库与其远程存储库之间冲突的方法.此解决方案在内存中进行合并,因此它不会触及索引,也不会触及工作树.我认为这是解决这个问题最安全的方法.以下是它的工作原理:
git fetch origin mastergit merge-base FETCH_HEAD mastergit merge-tree mergebase master FETCH_HEAD(mergebase是mergebase在先前步骤中打印的十六进制ID)现在假设您要将远程主服务器与本地主服务器合并,但您可以使用任何分支.git merge-tree将在内存中执行合并并将结果打印到标准输出.Grep的模式<<或>>.或者您可以将输出打印到文件并检查.如果你找到一条以"两者都改变"开头的行,那么很可能会发生冲突.
小智 51
我对此的简单蛮力解决方案是:
创建一个"预主"分支(当然是硕士)
将您想要的所有内容合并到此预主程序中.
然后你可以看到合并是如何发生而不触及主人.
无论如何,我会遵循@ orange80的建议.
Bri*_*ips 47
撤消与git的合并是如此简单,你甚至不应该担心干运行:
$ git pull $REMOTE $BRANCH
# uh oh, that wasn't right
$ git reset --hard ORIG_HEAD
# all is right with the world
Run Code Online (Sandbox Code Playgroud)
编辑:如下面的评论所述,如果您的工作目录或临时区域有变化,您可能希望在执行上述操作之前隐藏它们(否则它们将在git reset上面的内容后消失)
Oko*_*000 37
我为这样做了一个别名并且像魅力一样,我这样做:
git config --global alias.mergetest '!f(){ git merge --no-commit --no-ff "$1"; git merge --abort; echo "Merge aborted"; };f '
Run Code Online (Sandbox Code Playgroud)
现在我打电话
git mergetest <branchname>
Run Code Online (Sandbox Code Playgroud)
找出是否有任何冲突.
tim*_*imh 28
只是将当前分支与远程分支区分开来,这将告诉您在执行拉/合并时会发生什么变化.
#see diff between current master and remote branch
git diff master origin/master
Run Code Online (Sandbox Code Playgroud)
Arn*_*udR 20
我使用request-pull git命令来执行此操作.它允许您查看合并时可能发生的每个更改,但不在本地或远程存储库上执行任何操作.
例如,假设您要将名为"feature-x"的分支合并到主分支中
git request-pull master origin feature-x
Run Code Online (Sandbox Code Playgroud)
将向您展示会发生什么(没有做任何事情):
The following changes since commit fc01dde318:
Layout updates (2015-06-25 11:00:47 +0200)
are available in the git repository at:
http://fakeurl.com/myrepo.git/ feature-x
for you to fetch changes up to 841d3b41ad:
----------------------------------------------------------------
john (2):
Adding some layout
Refactoring
ioserver.js | 8 +++---
package.json | 7 +++++-
server.js | 4 +--
layout/ldkdsd.js | 277 +++++++++++++++++++++++++++++++++++++
4 files changed, 289 insertions(+), 7 deletions(-)
create mode 100644 layout/ldkdsd.js
Run Code Online (Sandbox Code Playgroud)
如果添加-p参数,您还将获得完整的补丁文本,就像您在每个更改的文件上执行git diff一样.
小智 19
我很惊讶没有人建议使用补丁.
假设你想从测试合并your_branch成master(我假设你已经master签出):
$ git diff master your_branch > your_branch.patch
$ git apply --check your_branch.patch
$ rm your_branch.patch
Run Code Online (Sandbox Code Playgroud)
这应该够了吧.
如果你得到错误
error: patch failed: test.txt:1
error: test.txt: patch does not apply
Run Code Online (Sandbox Code Playgroud)
这意味着补丁不成功,合并会产生冲突.没有输出意味着补丁是干净的,你可以轻松合并分支
请注意,这实际上不会更改您的工作树(当然,除了创建补丁文件,但之后您可以安全地删除它).从git-apply文档:
--check
Instead of applying the patch, see if the patch is applicable to the
current working tree and/or the index file and detects errors. Turns
off "apply".
Run Code Online (Sandbox Code Playgroud)
对于那些比我更聪明/更有经验的人,请注意:如果我在这里错了,请告诉我这个方法确实表现出与常规合并不同的行为.看起来奇怪的是,在这个问题存在的8年多时间里,没有人会提出这个看似明显的解决方案.
小智 8
这可能很有趣:来自文档:
如果您尝试合并导致复杂的冲突并想重新开始,则可以使用git merge -abort进行恢复.
但你也可以采用天真(但很慢)的方式:
rm -Rf /tmp/repository
cp -r repository /tmp/
cd /tmp/repository
git merge ...
...if successful, do the real merge. :)
Run Code Online (Sandbox Code Playgroud)
(注意:只有克隆到/ tmp才会起作用,你需要一个副本,以确保未提交的更改不会发生冲突).
我知道这是一个老问题,但它是第一个出现在Google搜索上的问题.
Git在合并时引入了--ff-only选项.
来自:http://git-scm.com/docs/git-merge
--ff只
拒绝以非零状态合并和退出,除非当前HEAD已经是最新的,或者合并可以解析为快进.
执行此操作将尝试合并和快进,如果它不能中止并提示您无法执行快进,但保持您的工作分支不受影响.如果它可以快进,那么它将在您的工作分支上执行合并.此选项也可用git pull.因此,您可以执行以下操作:
git pull --ff-only origin branchA #See if you can pull down and merge branchA
git merge --ff-only branchA branchB #See if you can merge branchA into branchB
Run Code Online (Sandbox Code Playgroud)
我的解决方案是向后合并。
不要将您的分支合并到远程“目标”分支,而是将该分支合并到您的分支中。
git checkout my-branch
git merge origin/target-branch
Run Code Online (Sandbox Code Playgroud)
您将了解是否存在任何冲突,并可以计划如何解决它们。
之后,您可以通过 git 中止合并merge --abort,或者(如果没有任何冲突并且发生合并)通过回滚到之前的提交git reset --hard HEAD~1
我使用git log来查看master分支的功能分支上发生的变化
git log does_this_branch..contain_this_branch_changes
Run Code Online (Sandbox Code Playgroud)
例如 - 查看已合并/未合并到master的功能分支中的提交:
git log master..feature_branch
Run Code Online (Sandbox Code Playgroud)
小智 6
我只想查看冲突(目前在 GitHub 中还看不到它们diff3)。充分利用上面的答案,我想出了这个:
git merge --no-commit --no-ff @{upstream}
git grep -l '<<<<<<< HEAD' | xargs -I % sh -c "echo -e '\n\e[93m%\n---\e[0m' && cat %"
git merge --abort
Run Code Online (Sandbox Code Playgroud)
对我来说,这是为了检查我的 PR。你可以@{upstream}用任何分支代替。
我希望这对某人有帮助。
| 归档时间: |
|
| 查看次数: |
174997 次 |
| 最近记录: |