我实际上不知道如何正确地提出这个问题,我希望我的问题能解决。
发生了什么:我基本上是用git从事一个小项目,因此我在本地创建了一个新分支,然后将其推送到远程。到目前为止一切都很好。
今天,就像处理完分支一样,我将其合并到master,然后在本地将其删除(git branch -d branch_to_delete
),然后使用git push看到更改出现在github上。事情是,在github上,分支仍然存在,当我查看网络时,它似乎从未存在过。
很奇怪吧?因此,我然后使用了git push origin -d to_delete_branch
,分支似乎已在github上删除,但仍然不会出现在网络上。所以我的问题是,我做错了什么? x)或实际上有什么问题吗?也许应该看起来像那样...
答案 0 :(得分:3)
分支只是一个名称。该名称存在,指向某个提交或其他提交,或者不存在。就您而言,它曾经存在,但现在不存在,因为您已将其删除。
与可能已提交或未提交给该分支的任何 commits 完全无关。这些提交不会丢失,因为您在删除分支的名称之前将其合并到master
中,因此您可以在图中看到它们。
如果问题是为什么这些提交以直到master
的直线出现而不是出现在“铁路侧线”上,那可能是因为到master
的合并是快速进行的。
答案 1 :(得分:2)
这可能是因为不是合并Git进行了“快进”。
假设您有这个。
A - B [master]
\
C - D [feature]
Git分支只是指向提交的标签。提交A和B在主机上。并在顶部内置C和D功能。
当您git merge feature
注意到Git而不是合并时,可以将master
移至D。不需要合并。
A - B
\
C - D [feature]
[master]
BC处的扭结是人为的,因此您会看到线性历史。
A - B - C - D [feature]
[master]
这是“快进”。当您进行git merge.
相比之下,假设您在合并之前对master做了一些工作。
A - B - E [master]
\
C - D [feature]
因为主版本和功能版本“不同”,所以Git需要合并两个代码库。 git merge feature
将产生合并提交,并且分支保留在历史记录中。
A - B - E - F [master]
\ /
C - D [feature]
由于这个原因,使用git merge --no-ff
的意思是“无快进”,以确保即使删除分支(实际上只是分支标签)之后也始终存在“功能泡沫”。然后,仅通过查看历史记录就可以知道C和D是作为一个逻辑组完成的,而F上的合并提交消息可以提供执行它们的原因的上下文。