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从那里向后跟踪历史
+--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)