如何将没有更改的分支合并到 git 中的 master 分支?

sha*_*ika 4 git github git-merge branching-and-merging git-branch

对 git branching 和 merge 有一个基本的疑问。一个分支可以在没有任何更改的情况下合并到 master 中吗?如果是这样,master 和 branch 之间存在的增量变化会发生什么。这是否会被 master 分支更改覆盖。请参考以下场景:

我有两个分支 master 和 BugBranch。

第1步:

C--B--A   (master)
      |
      X   (branch)
Run Code Online (Sandbox Code Playgroud)

从 master 那里拿了一个分支说 BugBranch 。现在我有一个文件 TestMerge.java。

public static void main(String[] args){
...
...
callSomeMethod();
  switch(decision)
  {
    case A:
        do_something
        break;
    case B:
        do_something
        break;
  }
}
Run Code Online (Sandbox Code Playgroud)

所以在 STEP 1 , master 和 BugBranch 看起来都一样。

第 2 步:文件(TestMerge)在 master 中更改如下。(刚取下开关)

public static void main(String[] args){
...
...
callSomeMethod();
}

C--B--A--1  (master)
      |
      X     (branch)
Run Code Online (Sandbox Code Playgroud)

第 3 步:问题是当我尝试将分支与 master 合并时。期待文件中的合并冲突,因为肯定存在增量并希望保留 BugBranch 中的更改。但奇怪的是,它随着主人的变化而被覆盖。

尝试了以下命令

git结帐大师

git合并错误分支

这真是令人困惑!

axi*_*iac 5

Git 分支只是一个指向提交的指针。X您问题中的分支指向提交A,对于许多 Git 操作,X可以使用它来代替,A反之亦然,您会得到相同的结果。

仅通过创建,Git 分支不会在存储库中产生任何更改。在您对文件进行一些更改并提交它们之前,该分支不会与其源分支(master在您的情况下)发生分歧。

您更改了一些文件并提交master(commit 1)。如果您没有在 branch 上更改和提交任何内容X,它仍然指向在 branchA的历史记录中的commit 1(实际上,它是它的父级)。

当你想将 branch 提交X到 branch 时master,Git 检测到该分支X在branch的过去master;从 开始master,如果 Git 反复从一个提交跳转到其父提交之一,它可以到达 branch 指向的提交X(即A提交)。

这意味着分支X不包含任何不在 branch 中的内容master。换句话说,没有要合并的内容,并且 Git 会通过消息“已经是最新的。”通知您这种情况。

另一方面,如果要合并masterX,因为master是在 的未来X,Git 将合并操作转换为“快进”操作。这意味着,它不会创建不必要的新合并提交,而只是将X分支(您合并到的分支)向前推送,直到它到达master提交(您从中合并的分支)。

您可以通过--no-ffgit merge命令行中使用标志来强制 Git 创建合并提交,但是,除了非常特殊的情况,您没有任何理由这样做。它会生成一个不会对文件进行任何更改的提交。