Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Github 在没有其他提交消息的情况下将多个功能分支合并到主功能?_Github_Git Merge - Fatal编程技术网

Github 在没有其他提交消息的情况下将多个功能分支合并到主功能?

Github 在没有其他提交消息的情况下将多个功能分支合并到主功能?,github,git-merge,Github,Git Merge,假设您有一个主分支: A--B--C 特征1分支: A--B--C--D 特征2分支: A--B--C--E 当我们将一个git merge Feature1合并到master中时,它可以很好地进行合并,但是当我们尝试合并Feature2时,会出现vi,要求我们为合并输入提交消息。有没有一种方法可以在不进行额外合并提交的情况下合并这些分支?除了提交功能外,它们与master共享相同的历史记录 master上的最终历史记录应如下所示: A--B--C--D--E 取决于第一个提交日期(D或

假设您有一个主分支:

A--B--C
特征1分支:

A--B--C--D
特征2分支:

A--B--C--E
当我们将一个
git merge Feature1
合并到master中时,它可以很好地进行合并,但是当我们尝试合并Feature2时,会出现vi,要求我们为合并输入提交消息。有没有一种方法可以在不进行额外合并提交的情况下合并这些分支?除了提交功能外,它们与master共享相同的历史记录

master上的最终历史记录应如下所示:

A--B--C--D--E
取决于第一个提交日期(D或E)

  • 在git中,历史记录是通过记录每个提交的父项来建立的——通常,“正常”提交有一个父项,“合并提交”有两个父项,但实际上可以有任意数量的父项,包括零
  • 每个提交都由其内容和元数据的散列来标识,其中包括提交人、提交时间及其父项列表。如果不获得新的提交哈希,就无法更改该数据的任何部分,因此所有提交实际上都是不可变的
  • git中的一个“分支”实际上只指向一个提交,git从那里向后跟踪历史
在git看来,情况是这样的 每个提交指向其父级或多个父级,每个分支指向一个提交

请注意,这张图上的角度没有任何意义,它们只是在2D中进行布局

          +--D <--(feature1)
          v
A <--B <--C <--(master)
          ^
          +--E <--(feature2)
重基 那么,我们如何创造这样的历史呢

A <--B <--C <--D <--E <--(master)
如果我们现在
git rebase master feature2
,git将创建一个新版本的所有提交,这些提交可以从feature2访问,但还不能从master访问。它将尝试创建应用相同更改的提交,并在默认情况下复制提交消息,甚至复制原始作者和时间戳,但它们将有新的父级

然后将feature2指向这些新提交;在我们的例子中,结果如下所示:

A <--B <--C <--D <--(master, feature1)
          ^
          +--E <--(feature2)
               +--(feature1)
               v
A <--B <--C <--D <--M2 <--(master)
          ^         |
          |         v
          +---------E <--(feature2)
          +----D <--(feature1)
          |    ^
          v    |
A <--B <--C <--M1 <--M2 <--(master)
          ^          |
          |          v
          +----------E <--(feature2)
A <--B <--C <--D <--(master, feature1)
          ^    ^
          |    +--E2 <--(feature2)
          |
          +--E

A非常有描述性,谢谢。在这种情况下,您更喜欢哪种选择?与其他提交或重定基础选项合并?或者您会使用不同的git工作流来避免这种情况altogether@KalinduPrabash这实际上是一个品味的问题——一些团队喜欢有一个整洁的线性历史,其他团队喜欢看到不同的分支在哪里合并。您正在使用的工作流类型也会对哪些选项有意义产生影响。
A <--B <--C <--D <--E <--(master)
A <--B <--C <--D <--(master, feature1)
          ^
          +--E <--(feature2)
A <--B <--C <--D <--(master, feature1)
          ^    ^
          |    +--E2 <--(feature2)
          |
          +--E
A <--B <--C <--D <--(feature1)
               ^
               +--E2 <--(feature2)
                   |
                   + <--(master)
               +--(feature1)
               v
A <--B <--C <--D <--E2 <--(master, feature2)