GIT合并的机制是什么?

What is the mechanism of GIT merging?

我是 GIT 的新手。我正在开发一个社交网络应用程序。和一个朋友一起 Android 这是一个非常庞大的项目,所以为了同步我们的开发,我决定使用版本控制。现在我的项目在 BitBucket 上。我决定不在命令行上浪费时间并开始使用 "SourceTree" 进行管理。现在我有些困惑。我了解 Commits、push、fetch、branching 等的基础知识。我的问题是:

比方说,我和我的朋友都在我们的应用程序开发分支中从事不同的活动。并进行提交,但是有一些文件对我们来说很常见,比如 Manifest.xml , build.gradle 等。所以当这些分支合并到 "Production/Master" 时,这些 "common" 文件将被容纳?如果我们都将代码添加到某个文件并且代码行的排列很重要,那么合并机制将如何为我们提供一个具有集成模块的工作项目,如果我的基本概念有误,请随时纠正并建议我一些参考 material。提前致谢

合并是通过几种不同的机制完成的。默认值通常效果很好,特别是对于较小的团队。当事情变得更大时,其他算法之一可能会更有效。如果双方都触及了某些区域,它们将被标记为冲突,您必须手动解决。我建议阅读 Git 书以获取更多详细信息和示例:

https://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging

如果您和您的朋友修改同一个文件。当您进行合并时,可能会发生两件事:

  1. 如果你们俩在不同的代码区域修改同一个文件。 Git 能够在没有冲突的情况下进行合并。

  2. 如果你们在相同的代码区域修改同一个文件。 Git 将在有冲突的情况下进行合并。

如果文件有冲突,它将如下所示:

... Some code ...
<<<<<<< HEAD
   Line added by you
-------
   Line added by your friend
>>>>>>> branch_name
... More code ...

您需要确定两行(您添加的行和您朋友添加的行)中哪一行的代码正确。然后,删除有错误代码的行和以下行:

<<<<<<< HEAD
-------
>>>>>>> branch_name

如果需要,您可以设置一个工具来解决冲突,例如 p4merge。您可以从以下网址下载:

p4merge for Windows 64 bits

p4merge for Windows 32 bits

p4merge for other OS

您安装此工具,然后需要使用此 git 命令进行设置:

git config --global mergetool.p4merge.path 'C:\Program Files\Perforce\p4merge.exe'
git config --global merge.tool p4merge

验证是否一切正常。您的 .git 配置文件 (C:\Users\windows_user\.gitconfig) 将如下所示:

[merge]
    tool = p4merge
[mergetool "p4merge"]
    path = C:\Program Files\Perforce\p4merge.exe

在您拥有 运行 git merge 命令之后。要使用 p4merge 解决冲突,您需要执行 git mergetool 命令。它打开 p4merge 工具并显示如下图所示的冲突:

当同一个文件在两个不同的实例中被修改然后合并时,有两种可能的结果。如果文件中修改的代码在不同的部分,Git 将合并两个文件。如果两个文件都修改了代码的同一部分,那么 Git 会给你一个合并冲突,你必须解决这个问题。

下面的 link 详细介绍了解决合并冲突的细节。 https://help.github.com/articles/resolving-a-merge-conflict-from-the-command-line/

另一个应该考虑的选项是变基。 https://www.atlassian.com/git/tutorials/merging-vs-rebasing/conceptual-overview