我如何从github历史记录中删除分支?

时间:2019-02-22 21:09:31

标签: git github

我实际上不知道如何正确地提出这个问题,我希望我的问题能解决。

发生了什么:我基本上是用git从事一个小项目,因此我在本地创建了一个新分支,然后将其推送到远程。到目前为止一切都很好。

今天,就像处理完分支一样,我将其合并到master,然后在本地将其删除(git branch -d branch_to_delete),然后使用git push看到更改出现在github上。事情是,在github上,分支仍然存在,当我查看网络时,它似乎从未存在过。

enter image description here

很奇怪吧?因此,我然后使用了git push origin -d to_delete_branch,分支似乎已在github上删除,但仍然不会出现在网络上。所以我的问题是,我做错了什么? x)或实际上有什么问题吗?也许应该看起来像那样...

2 个答案:

答案 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.

时,Git会提到这一点

相比之下,假设您在合并之前对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上的合并提交消息可以提供执行它们的原因的上下文。