标签: git-merge

Git中的合并是否对称?

假设我们有两个分支(BC),它们与共同的祖先A不同.从BC的合并会产生与从CB合并相同的结果吗?

  A
  |
 / \
B   C
Run Code Online (Sandbox Code Playgroud)

澄清 - 我假设任何手动合并冲突解决方案都会在两个方向上发生.但是,任何自动合并都会导致选择相同的代码吗?这就是我所假设的,因为提交日期在两个方向上都是相同的.

为了进一步澄清 - 我知道实际的合并会导致基于方向的彼此的"镜像".我只是询问自动解决的冲突.

git merge git-merge branching-and-merging symmetry

37
推荐指数
2
解决办法
3259
查看次数

为什么在使用git rebase时会再次出现相同的冲突?

我已经在SO上阅读了关于git merge和git rebase的相关问题,但我仍然无法完全理解幕后发生的事情.

这是我们的分支情况:

MASTER------------------------
        \        \
         \        \----Feature B---
          \                        \
           \-----Feature A----------\---Feature A+B
Run Code Online (Sandbox Code Playgroud)

我们有2个功能分支,它们来自不同时间的master,现在我们想要组合2个分支.我们希望遵循这种first rebase then merge做法,但是当我们将功能A重新命名为功能B时,我们会遇到冲突.这是预期的,因为两个功能(和主人)在相同的区域都有变化.但奇怪的是,同样的冲突在此之后不断出现git rebase --continue.这让我们疯狂,所以我们最终中止了rebase,并使用了git merge.事实证明,冲突实际上很容易解决.

我的问题是双重的:

  1. git rebase适合我们situtation?或者,只有少数(1或2)变化才能改变?
  2. 引擎相同的冲突会一次又一次地重现?我的理解是一次rebase解决一个冲突,但通过比较哪个提交到什么?

关于SO的相关帖子:

git merge git-merge git-rebase

36
推荐指数
1
解决办法
1万
查看次数

将一个分支合并到另一个分支的Git是双向合并吗?

我的git repo看起来像这样:

         _ branch_a
        /
master /
        \_ branch_b
Run Code Online (Sandbox Code Playgroud)

现在我想将branch_b合并到branch_a中,而不是将其分支到master中.

所以我做了

git checkout branch_a
git merge branch_b
Run Code Online (Sandbox Code Playgroud)

git去了,发现了几个冲突.

当我git mergetool使用meld我在控制台上获得的东西时

 {local}: modified file
 {remote}: modified file
Run Code Online (Sandbox Code Playgroud)

和一个只显示LOCAL和REMOTE的窗口.

我想知道的是:

  1. 为什么不显示master中的内容的共享基础?

  2. 在LOCAL和REMOTE之间,我应该编辑哪一个?

git merge meld git-merge

35
推荐指数
1
解决办法
8万
查看次数

Visual Studio 2013不提供在Git pull上进行合并

我正在使用Visual Studio 2013 Update 4和git(在Visual Studio Online上托管).我在远程分支中有2个本地提交和2个提交.提交没有本地更改:

工作目录清理

当我尝试在Visual Studio中执行Pull(或Fetch)时,我收到错误:

发生错误.详细消息:1冲突阻止结账

发生错误. 详细消息:1冲突阻止结账

是的,有冲突,我应该合并.根据这个页面,我应该得到一个解决冲突链接.但我在VS中没有看到.

我可以在VS之外进行合并,但这不是重点.同时,我的同事运行相同的设置可以进行合并而没有任何问题.我的VS出了什么问题?

ps我安装了msysgit可能会搞乱配置.根据这篇文章 我的全球.gitconfig看起来像:

[user]
    mail = trailmax@stackoverflow.com
    name = trailmax
    email = trailmax@stackoverflow.com
[core]
    excludesfile = C:\\Users\\trailmax\\Documents\\gitignore_global.txt
    autocrlf = true
    editor = \"C:/Program Files (x86)/GitExtensions/GitExtensions.exe\" fileeditor
[diff]
    tool = vsdiffmerge    
[difftool "vsdiffmerge"]
    cmd = \"C:\\Program Files (x86)\\Microsoft Visual Studio 12.0\\Common7\\IDE\\vsdiffmerge.exe\" \"$LOCAL\" \"$REMOTE\" //t
    keepbackup = false
    trustexistcode = true
[merge]
    tool = vsdiffmerge
[mergetool]
    prompt = true
[mergetool "vsdiffmerge"] …
Run Code Online (Sandbox Code Playgroud)

git git-merge merge-conflict-resolution visual-studio-2013

35
推荐指数
4
解决办法
3万
查看次数

如何避免git rebase查杀合并提交?

鉴于以下git历史:

    C-I    origin/master
   /
A-B-F-G-H  master
 \   /
  D-E      branch-b
Run Code Online (Sandbox Code Playgroud)

我想重新定义我的本地master分支origin/master,但我想保留合并提交G.当我尝试简单地做git rebase origin/master一会儿时master就被压扁了D..E,G并用提交消息提交了E,所以有一个合并的历史丢失了.有没有办法保留这个合并,同时仍然得到rebase?为清楚起见,我的预期结果是:

A-B-C-I-F-G-H  master
 \       /
  D-----E      branch-b
Run Code Online (Sandbox Code Playgroud)

git version-control git-merge git-rebase

34
推荐指数
1
解决办法
6722
查看次数

Git - 每个分支的不同遥控器

我不确定如何正确地问这个,但我会尽力而为 - 我绝不是一个Git爱好者,我知道如何使用基本命令而不是高级术语/功能.

我有一个myrepo从私人服务器克隆的私人存储库git.mydomain.com.我熟悉在同一个存储库上分支代码的过程git checkout -b mybranch- 但是我想分支到GitHub而不是我的私有服务器,导致这样的事情:

Repo       Branch      Remote Location    (Purpose)
------------------------------------------------------------
myrepo --> private --> git.mydomain.com  (Incremental work)
  |
  +------> public  --> github.com        (Public releases)
Run Code Online (Sandbox Code Playgroud)

基本上我希望能够git checkout publicgit merge private.

git merge github git-merge git-branch

34
推荐指数
1
解决办法
7751
查看次数

git merge --no-commit vs git cherry-pick --no-commit

有什么区别git merge --no-commitgit cherry-pick --no-commit

如果我遵循这两个命令后,历史上有什么不同吗?

git git-merge git-cherry-pick

34
推荐指数
2
解决办法
2万
查看次数

如果Git提交是Merge/Revert提交则告诉

我正在编写一个脚本,需要检查特定提交是否是合并/恢复提交,我想知道是否有一个git技巧.

到目前为止我提出的(我绝对不想依赖于提交消息)是检查HASH^2并查看我是否没有收到错误,是否有更好的方法?

git git-merge git-commit git-hash

33
推荐指数
5
解决办法
1万
查看次数

如何重新合并git中的文件?

我有10个文件在合并分支时有冲突.我已经解决了10个文件的所有冲突(花了很长时间).不幸的是,在提交之前,我发现一个文件合并错误,需要再次启动此文件.:(

在Git中,如何标记已合并的文件,换句话说,如何重新合并那个文件?

git git-merge

32
推荐指数
1
解决办法
6218
查看次数

取消合并git分支,保持合并后提交

说有两个分支masterbranchA.

我的工作master,朋友branchA.一旦事情敲定,我们合并branchAmaster.

在合并的几次提交之后master,客户端希望branchA删除完成的工作,但不是在合并之后完成的提交.

我们怎么做?

git git-merge

32
推荐指数
1
解决办法
2万
查看次数