"git branch -d" 的使用场景是什么?

15

今天我在帮助一位同事时发现,git branch -Dgit branch -d有略微不同的功能。根据git帮助文档:

-d --delete  delete fully merged branch
-D           delete branch (even if not merged)

我能理解避免随意删除分支的想法,但是Git如何确定何时可以使用branch -d命令?有哪些情况下可以正确地使用branch -d命令?


这个回答解决了你的问题吗?如何在本地和远程删除Git分支? - Henke
3个回答

29

-D视为强制删除分支。 即使该分支尚未合并到您当前使用的分支中,它也会将其删除。

然而,-d会发出警告,并且在其被合并之前不会删除该分支。

例如:

您已从master分支创建了一个名为A的分支,并对A进行了提交。 然后切换回master分支,并尝试运行git branch -d A,您将收到以下消息:

git branch -d A
error: The branch 'A' is not fully merged.
If you are sure you want to delete it, run 'git branch -D A'.

这是因为您在A分支上有提交,而master分支没有这些提交,Git希望在将这些更改合并到当前分支之前确认您确实想要删除该分支。


我喜欢“强制分支删除”这个术语。+1。 - eckes

4
当一个分支被完全合并(即该分支的所有修订版本都已推送到相应的远程分支或该分支已合并到 master),使用 -d 就足够了。来自文档的说明:

删除一个分支。该分支必须在其上游分支中完全合并,或者如果没有使用 --track 或 --set-upstream 设置上游,则在 HEAD 中进行合并。

如果您执行了 merge --squash(即该分支的不是所有修订版本都包含在 master 中)或者您没有将该分支合并到任何地方,因为您意识到您正在做错事并想要摆脱这个分支,需要使用 -D

无论其合并状态如何都删除一个分支。


1

什么情况下应该正确使用 branch -d 命令?

当一个 pull request 已经被合并到主分支后,就可以执行此操作。假设该分支只用于特定项目且该项目已完成,则可以在合并后删除从中发起 pull request 的分支。


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