2

这是我的情况,有一个 GIT 存储库,我在 master 上工作,而其他人在一个分支上工作,比如地铁,具有以下历史记录(比如一个文件):

编辑:对不起,格式不是用户友好的,我已将其更新如下:

人员 A 和 B 都在处理同一个文件,人员 A 正在处理 master 并提交:Time1A、Time2A 和 Time3A 更改:分别添加 1、3、5

人 B 正在分支地铁上工作,提交:Time1B、Time2B 和 Time3B 更改:分别添加 2、4、6

当 PersonB 从 metro 合并到 master 时,提交历史将如下所示:

时间1A,时间1B,时间2A,时间2B,时间3A,时间3B

在我得到的文件中:1,2,3,4,5,6。

如果我需要在合并之前获得一个干净的 master,我可以只签出 Time3A 的提交吗?它是否包括在 Time3 之前从地铁合并的东西?

谢谢

4

2 回答 2

3

在 Git 中进行合并只会增加历史记录。它不会修改过去 - 如果您在合并后检查过去的提交,该提交将与提交时完全相同。

顺便说一句,您的时间线并不真正正确:这两个分支并没有像那样追溯混合。提交历史的更好描述是:

master -> ... Time1A -- Time2A -- Time3A
                                        \
                                         >-- Merge
                                        /
subway -> ... Time1B -- Time2B -- Time3B

在这段历史中,标记为“Merge”的提交有两个父项(Time3A 和 Time3B)。

于 2013-04-16T05:51:12.827 回答
2

一个更好的解决方案是 B 将他/她的工作重新基于 A

(master) -> ... Time1A -- Time2A -- Time3A
                                        \
                                         >--  Time1B' -- Time2B' -- Time3B' (subway)

然后合并到 master 是一个快进的:

(master) -> ... Time1A -- Time2A -- Time3A --  Time1B' -- Time2B' -- Time3B' (master,subway)

见“git rebasegit merge”。

于 2013-04-16T05:55:05.700 回答