Git 合并时的行为
Git behaviour when merging
我有一个项目有一个源分支 - Branch1 和两个我从 Branch1 获取的分支,比如 Branch2 和 Branch3。
我在Branch2删除了一个文件,要求合并到Branch1。合并成功。
我对 Branch3 中的文件进行了更新,但在 Branch2 中删除的文件在 Branch3 中仍然可见。
然后成功合并到Branch1
但我认为 Git 会将 Branch3 的快照合并到 Branch1 上,该快照仍有文件。
但是,唉,不,在第一个合并请求中删除的文件已经消失了。
事实上,在 Branch3 到 Branch1 的合并请求期间,git 甚至没有告诉我该文件在 GitLab 中的差异。
我的问题是,我认为 Git 将始终复制 Branch3 的整个快照并将其合并到 Branch1。
为什么没有发生?
为了更具体,我们将您在分支 2 上删除的文件称为 foo.txt
。当您将 Branch 2 合并到 Branch 1 时,该文件现在也会在 Branch 1 上删除。由于 Branch 3 不修改此文件,因此即使在合并 Branch 3 后,它仍会在 Branch 1 上被删除。
考虑这一点的最佳方式是合并将 更改 从一个分支复制到另一个分支。合并时它不会复制整个快照。不过,这仍然有点手摇。为了更准确地了解 git 的工作原理,了解什么是提交很重要。基本上,提交是一组更改以及一些额外的元数据,例如时间戳、作者姓名等。This article 给出了非常有帮助的深入描述。
分支就是一系列提交。当您签出一个分支时,git 通过在该分支上应用提交中的所有更改来创建它跟踪的所有文件的本地副本。合并也是如此:git merge branch1
会将 branch1 中但不在当前分支中的所有更改应用到本地文件。
现在更容易理解以下命令中发生的事情:
git checkout branch1
git merge branch3
由于分支 3 不会更改在分支 1 上删除的文件,因此 git 将其保持原样。 Git 将仅应用分支 3 中尚未包含在分支 1 中的更改。
我有一个项目有一个源分支 - Branch1 和两个我从 Branch1 获取的分支,比如 Branch2 和 Branch3。
我在Branch2删除了一个文件,要求合并到Branch1。合并成功。
我对 Branch3 中的文件进行了更新,但在 Branch2 中删除的文件在 Branch3 中仍然可见。
然后成功合并到Branch1
但我认为 Git 会将 Branch3 的快照合并到 Branch1 上,该快照仍有文件。 但是,唉,不,在第一个合并请求中删除的文件已经消失了。 事实上,在 Branch3 到 Branch1 的合并请求期间,git 甚至没有告诉我该文件在 GitLab 中的差异。
我的问题是,我认为 Git 将始终复制 Branch3 的整个快照并将其合并到 Branch1。
为什么没有发生?
为了更具体,我们将您在分支 2 上删除的文件称为 foo.txt
。当您将 Branch 2 合并到 Branch 1 时,该文件现在也会在 Branch 1 上删除。由于 Branch 3 不修改此文件,因此即使在合并 Branch 3 后,它仍会在 Branch 1 上被删除。
考虑这一点的最佳方式是合并将 更改 从一个分支复制到另一个分支。合并时它不会复制整个快照。不过,这仍然有点手摇。为了更准确地了解 git 的工作原理,了解什么是提交很重要。基本上,提交是一组更改以及一些额外的元数据,例如时间戳、作者姓名等。This article 给出了非常有帮助的深入描述。
分支就是一系列提交。当您签出一个分支时,git 通过在该分支上应用提交中的所有更改来创建它跟踪的所有文件的本地副本。合并也是如此:git merge branch1
会将 branch1 中但不在当前分支中的所有更改应用到本地文件。
现在更容易理解以下命令中发生的事情:
git checkout branch1
git merge branch3
由于分支 3 不会更改在分支 1 上删除的文件,因此 git 将其保持原样。 Git 将仅应用分支 3 中尚未包含在分支 1 中的更改。