git - git中如何将没有变化的分支 merge 到master分支?

标签 git github git-branch git-merge branching-and-merging

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

我有两个分支 master 和 BugBranch。

第 1 步:

C--B--A   (master)
      |
      X   (branch)

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

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

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

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

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

C--B--A--1  (master)
      |
      X     (branch)

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

尝试了下面的命令

git checkout master

git merge BugBranch

这真是令人困惑!

最佳答案

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

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

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

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

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

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

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

关于git - git中如何将没有变化的分支 merge 到master分支?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41076489/

相关文章:

git - 是否可以将公共(public) GitHub 存储库 fork 到企业存储库中?

Git Bash 在 Windows 7 x64 上非常慢

git - 相当于 git 预 merge 钩子(Hook)?

xcode - 如何将 Xcode 与 GitHub 集成?

git - 我不小心用错误的用户帐户推送到了 git 存储库。我怎样才能撤消它或更改用户?

git - 执行两个非常不同的分支的 merge ,因为需要快进 merge 提交而变得复杂

git - 为什么我没有被列为 merge 我的 PR 的项目的贡献者?

git - 将提交添加到 merge 的分支并开始新的 pull 请求

github - 大查询 : When is GHTorrent refreshed and how to get up to date information?

git - 停止 git push 推送到多个分支