3

问候大家,

我一直在编写一个 bash 脚本作为一个小型夏季项目,以了解有关 UNIX 脚本和使用 git 的更多信息。

这是我第一次在git中使用分支,通常我只是坚持master。

git log --graph当我注意到我的“开发”分支似乎已与“主”合并时,我正在查看带有图形 () 的 git 日志。像这样的东西:

主人----1--------3----4----5----6----HEAD
开发\---2---/

但是提交 3 之后是在开发分支中完成的。这样做git checkout mastergit checkout develop证明这是真的。

到底发生了什么?这就是所谓的快进吗?

更新#1:

提交 1,实际上并不是我的仓库中的第一次提交,它是我在“master”上所做的最后一次提交

更新#2:

这是给出的图表gitk --all

                   标记“1.0-0”
                        |
主人 --*--*--*--*--*--*----2\
开发\1----3----4----5----6

更新#3:

我仔细查看gitk并发现直到提交 1 之前的所有提交都发生在“开发”分支和“主”分支中。

感谢 SimoneDemoGentili 指出我的错误使用git checkout develop

PS:提交 1 和 2 对我来说也是一个谜,因为提交 2 实际上是对提交 1 的修正(据我所知,我使用了这个建议

4

1 回答 1

2

分支机构

git 分支只是指向特定提交的可移动指针。他们自己的提交没有附加任何分支属性。如果提交是分支指针附加到的提交的祖先,Git 会显示属于分支的提交。

假设您有以下历史记录:

     4 <- A
     |\
     | \
     2  3 <- B
     | /
     |/
     1
     |
     0

然后所有提交都在分支 A 上,因为所有提交都是提交 4 的祖先,分支 A 指向。但是分支 B 上只有 0、1 和 3,因为这些提交是提交 3 的历史。

快进

快进合并是一种合并,其中一个分支的分支指针可以简单地移动到新的提交而不会丢失历史记录。当目标提交是分支当前指向的提交的后继时,就是这种情况。在前面的示例中,分支 A 可以 FF-Merged 到分支 B,因为提交 4 是提交 3 的后继。在此合并之后,B 还希望 A 指向提交 4。以下历史记录显示了非 FF 合并的示例:

A -> 2  3 <- B
     | /
     |/
     1
     |
     0

这里 B 不能移动到提交 2,因为那时提交 3 将退出历史记录。为了解决这个问题,必须在 2 和 3 之间创建真正的合并,导致以下历史记录:

     4 <- B
     |\
     | \
A -> 2  3
     | /
     |/
     1
     |
     0
于 2012-06-22T11:04:27.543 回答