我今天正在帮助一名同事,并发现git branch -D
和git branch -d
做的事略有不同。从git帮助文档:
-d --delete delete fully merged branch
-D delete branch (even if not merged)
我可以理解避免任意删除分支,但git如何确定何时允许branch -d
?有人会何时正确使用branch -d
?
答案 0 :(得分:13)
将-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
没有的提交,并且确保要在将这些更改提取到当前分支之前删除它。
答案 1 :(得分:2)
当一个分支完全合并时(即该分支的所有修订都被推送到它的相应位置)
远程或分支合并到master
),-d
就足够了。来自docs:
删除分支。分支必须在其上游分支中完全合并,或者如果没有使用--track或--set-upstream设置上游,则必须在HEAD中合并。
如果您执行了merge --squash
(即并非所有此分支的修订都包含在master
中),或者您没有将分支合并到任何地方,因为您认识到您做错了并且想要扔掉这个分支,需要-D
:
删除分支,不论其合并状态如何。
答案 2 :(得分:1)
什么时候会有人正确使用branch -d?
一旦将pull请求合并到主分支中,就会执行此操作。合并之后删除请求的分支很好被删除(假设分支仅用于特定项目并且项目已完成)。