Py学习  »  Git

如何正确地进行git合并

user2439070 • 4 年前 • 830 次点击  

我有两个分支:师父和布兰克2。

它们仅在一行上有所不同,以供评论:

师父有意见://test 00

branch2有注释://test 99

假设我从branch2开始并合并到master,那行是不是

//test 00或//test 99?当我尝试使用git bash时,它返回消息“merge maked by the‘recursive’strategy”,但实际上它并没有显示更改。

PS C:\Node\projects\n-5-10-workflow-test> git checkout branch2
 Switched to branch 'branch2'
PS C:\Node\projects\n-5-10-workflow-test> git status
 On branch branch2
 nothing to commit, working tree clean
PS C:\Node\projects\n-5-10-workflow-test> git remote show origin
 * remote origin
 Fetch URL: https://github.com/masterinex/workflow.git
 Push URL: https://github.com/masterinex/workflow.git
 HEAD branch: master
 Remote branches:
  branch2 tracked
  master tracked
 Local branch configured for 'git pull':
  master merges with remote master
 Local refs configured for 'git push':
  branch2 pushes to branch2 (fast-forwardable)
  master pushes to master (up to date)
PS C:\Node\projects\n-5-10-workflow-test> git status
 On branch branch2
 nothing to commit, working tree clean
PS C:\Node\projects\n-5-10-workflow-test> git branch -a
 * branch2
 master
 remotes/heroku/master
 remotes/origin/branch2
 remotes/origin/master
PS C:\Node\projects\n-5-10-workflow-test> git merge master
 Merge made by the 'recursive' strategy.
PS C:\Node\projects\n-5-10-workflow-test>
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/43928
 
830 次点击  
文章 [ 4 ]  |  最新文章 4 年前
benhorgen
Reply   •   1 楼
benhorgen    5 年前

对你问题的简短回答, “假设我从 branch2 我融入 master ,该行是“//test 00”还是“//test 99” :

如果你正在合并 鳃2 进入之内 主人 鳃2 已从分支 主人 那么答案是“//test 99”。

但如果这行代码在 主人 从原始价值 “/测试00” 在那个时候 鳃2 创建了,然后会有合并冲突。

如果 鳃2 是从另一个没有根的分支创建的 主人 然后期待一场冲突。但在git中,默认情况下所有分支都指向标记为 主人 …除非在回购协议中有一些奇怪的分支历史。

Ian MacDonald
Reply   •   2 楼
Ian MacDonald    5 年前

你的合并合并了你的本地 master 分支 进入之内 你当地的工作部门( branch2 )由于没有冲突,这条线路的历史可能如下:

|
* (master)         // test 99
|\
| * (branch2)      // test 99
* | (master)       // test 00
|\|
| * (branch2)      // test 00

意思是当前分支上的文件应该包含 // test 00 .

这似乎是你的问题,但是 grep '// test' <the file> 会回答你的问题…

Guru_Clef
Reply   •   3 楼
Guru_Clef    5 年前

当你做一个 合并分支 你要把主分支带到实际分支。

//on branch branch2
git merge master

主服务器的所有内容都将转到Branch2

分支2<———————————————————————————————————————————————

torek
Reply   •   4 楼
torek    5 年前

[分支] master branch2 ]只有一行的注释不同:

师父有意见://test 00

branch2有注释://test 99

这是。。。不是没用的,也不是完全用的 充满 信息。当你对什么感兴趣 git merge 好的,每个分支的提示内容是 答案的钥匙。更确切地说,它们是必要的,但严重不足。

首先,记住提交包含文件。我想当你说 主人 有X和 鳃2 你真的是说: 提示中的所有文件提交由 主人 鳃2 分别是相同的,除了一些文件 f ,其中有一些行 L 其文本不同:该行显示 //test 00 在里面 主人 //test 99 在里面 鳃2 .

也就是说,如果我们要绘制提交图,它可能如下所示:

          o--o--X   <-- master
         /
...--o--*
         \
          o--Y   <-- branch2 (HEAD)

(还有其他可能的形状,但是 合并分支 表明这很像。名字 HEAD 附加到 鳃2 因为那是你签过的。)

这里我用过 X Y 表示 提示提交 分支机构 主人 鳃2 。因为每个提交都包含它的直接父提交的散列ID,所以我们可以从上一个提交中向后工作。 主人 上一次提交 主人 ,从那里到 它的 上一次提交,依此类推。我们也可以从提交开始。 Y 向后移动。当我们同时从 二者都 提交,我们最终会达到一些连接点:提交 * ,而不是一个回合 o 提交。

第一个这样的连接点对于 合并分支 ,因为它是 合并基础 . 合并基础是理解 合并分支 会的。

合并的目的是合并工作 ,而不是简单地使两个分支相同。为了 结合 工作完成了,吉特必须找出 工作是什么 . 这项工作包括 自公共起点以来所做的所有更改 . 合并基础是共同的起点。

实际上,git现在将运行两个单独的 git diff 命令。一个人将比较提交 * 提交 X ,看看“他们”在分行做了什么 主人 . 另一个将比较提交 * 提交 Y ,看看 在你的树枝上, 鳃2 . 即:

git diff --find-renames <hash-of-*> <hash-of-Y>   # what did we change, on branch2?
git diff --find-renames <hash-of-*> <hash-of-X>   # what did they change, on master?

吉特 组合 这两组更改并将组合的更改应用于commit的内容 * .

自从你,在 鳃2 很明显,他们做的一切都一样 主人 的确如此, 除了 换行 L 文件的 f ,组合的更改将相同,但此行除外。现在的问题是: 谁改了线?

我们这么说吧 * ,该行显示 /测试00 。然后 换了线,所以Git会 你的 改变,结果就是这样 L 文件的 f 将阅读 /测试99 .

但是我们可以这么说 * ,该行显示 /测试99 。然后 他们 换了线,所以Git会 他们的 改变,结果就是这样 L 文件的 f 将阅读 /测试00 .

最后,有可能在 * ,该行完全读取了其他内容。在这种情况下,你和他们都改变了 相同的 直线 相同的 文件,但有两个不同的东西。在这种情况下, 合并分支 会宣布有冲突,会停下来留下你必须清理的烂摊子。由于这种情况没有发生,显然情况并非如此。

检查该文件将告诉您git保留了哪些更改,而这又将告诉您该行在合并基中的外观。或者您可以自己找到合并基,并在该特定提交中检查该文件的版本。但是根据您所告诉我们的,我们无法预测哪一行进入合并提交。