“关闭”和“删除”分支之间有什么区别?

11

'关闭'和'删除'分支之间有什么区别?

我见过这两个术语在Git上被使用,但我不确定它们在Git的上下文中确切的含义是什么。它们是否都有效地指代同样的事情(即git branch -d),还是存在一些微妙的差异需要我了解?

我可能错了,但到目前为止我的理解是,除非我在删除之前标记分支,否则一旦分支被删除,就没有留下任何证据表明它曾经存在过。正确吗?


3
也许举一些例子会有助于你的事业。我从未见过“关闭分支”这个词组。 - Zombo
除非您对存储库进行垃圾回收,否则您的分支(或者说,其所有提交)将保留在存储库中,并且可以通过不同的方式找到。就像我刚刚发现的 git fsck --lost-found 一样。git reflog 记录了对存储库执行的操作,也会显示您在分支上进行了提交并离开了它。 - millimoose
@StevenPenny https://dev59.com/R1nUa4cB1Zd3GeqPdb5m https://dev59.com/lmoy5IYBdhLWcg3wWso_ http://programmers.stackexchange.com/questions/200643/can-you-close-branches-in-git - John Mee
2
看起来答案是“没有意识形态上的差异,只是语义上的不同。” 正确的 Git 术语是“delete”。这是从 Mercurial 中泄漏出来的术语,它有一个“close-branch”选项,可以将其留在存档/只读状态或类似状态中。 - John Mee
对于 Bitbucket 来说,关闭和删除似乎是一样的,也许可以参考这里:https://support.atlassian.com/bitbucket-cloud/docs/manage-unmerged-branches/。 - gawkface
3个回答

7
在git中没有明确的命令被称为“close”,可能是因为惯例,一些程序员在将分支合并回项目并不再维护时将其称为“closed”。有时保留该分支,有时删除它,但是想法是它不再被使用。
回答您的第二个问题,您可以通过几种方式在删除分支后跟踪它。最常见的方法是通过远程主机。运行“git -d branch_name”只会销毁您的本地副本。远程主机仍将拥有其版本以备日后需要。您还可以隐藏即将删除的分支,并稍后回来查看它。这是如何隐藏的。
git stash save "I'm saving this branch before I delete it because yolo"

这是一个关于如何使用stash实现你的目标的链接,但是你的目标是不寻常的用例: https://www.kernel.org/pub/software/scm/git/docs/git-stash.html 基本上,如果你将你的分支藏起来(即stash),那么就能在删除后记录它的存在。另外,如果你将该分支合并到其他分支中,则这些分支仍然知道删除的分支的一些信息(主要是它曾经存在过)。同样,你可以通过 git log --graph 命令查看给定分支对其自身合并历史的了解。
可能还有其他方法可以在删除后以某种方式查看分支,但对于大多数工作流程来说,这应该不是问题。

您无法对分支进行隐藏;git stash 仅适用于工作目录和索引中的更改。对已删除分支的引用将在 Git 的 reflog 中保留一段时间。 - mipadi
@mipadi:在删除分支之前进行存储会通过存储列表保存对旧分支HEAD的引用,但我不认为这是明智的做法。 - siride
@siride:怎么做到的?git stash只对工作目录和索引中的更改进行操作。它是如何保存对分支的引用的? - mipadi
@mipadi: git stash 创建了两个提交对象,因此它们将被引用到 stash 的时刻所指向的 HEAD。Stash 是被跟踪的引用,因此它们所引用的一切也被视为活动和不可回收。 - siride
1
@mipadi 你可以执行以下操作,基本上是将一个分支存储起来,git stash save "嘿,保存这个分支" 然后稍后 git checkout stash@{0} 假设那个存储的名字是你保存的。然后你就会把以前存储的分支作为当前分支检出。 - usumoio
显示剩余4条评论

4

我后来意识到,“关闭分支”大致相当于“删除本地和远程分支的所有副本”。

不同之处在于,删除分支只是概念上关闭分支的一个技术子步骤。

关闭是指永久从团队的思维中删除分支,这掩盖了合并、放弃或任何必要的混乱细节,使其成为过去的事情。


1
在git中,分支只是指向某个特定提交的标签。Git本身并不知道“关闭”分支的概念。也许你说的是GitHub.com的拉取请求功能?那实际上并不是git本身的一部分。您可以在github上关闭拉取请求,以便它不再显示在打开的拉取请求列表中,但这不会对存储库产生任何影响。它不会更改任何分支。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接