summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorWolfgang Müller2021-06-13 20:30:21 +0200
committerWolfgang Müller2021-06-13 20:30:21 +0200
commit3b306ae249f605da4ab5b5e7afa55d5974e92176 (patch)
tree7baaa3d2a90e0e83dbf9d58cc3bffd788a06cc76
parentf99133842b48dc7d99e577df37e34ea143f1eeaf (diff)
downloadzunzuncito-3b306ae249f605da4ab5b5e7afa55d5974e92176.tar.gz
content: Add new post: "Patch workflows and git branch -d"
-rw-r--r--content/3/index.md31
1 files changed, 31 insertions, 0 deletions
diff --git a/content/3/index.md b/content/3/index.md
new file mode 100644
index 0000000..8682fe2
--- /dev/null
+++ b/content/3/index.md
@@ -0,0 +1,31 @@
++++
+date = 2021-06-13T20:22:51+02:00
+title = "Patch workflows and git branch -d"
+
+[taxonomies]
+tags = ["git", "TIL"]
++++
+
+The notion of a "merged" branch is highly dependent on the
+[workflow](https://git-scm.com/docs/gitworkflows) used for a project. I was
+wanting to clean up some topic branches in my copy of git.git today, but `git
+branch -d` refused to delete them, pointing out that they were not yet merged.
+
+I knew for a fact that they were, which made me look up how `git branch -d`
+actually determines that. The manual is not entirely clear, but a
+[comment](https://github.com/git/git/blob/211eca0895794362184da2be2a2d812d070719d3/builtin/branch.c#L116-L121)
+in the code pointed out that git constructs the merge base of the branch and its
+upstream (or `HEAD` if there is none) and checks whether the branch is reachable
+from that merge base.
+
+In a patch workflow, this will generally not be true. A lot of things may
+happen to your patches before inclusion, and with git.git they will get at least
+one other sign-off. They'll be recorded in a merge commit, but it will not have
+your original branch as one of its parents.
+
+Therefore, neither `git branch -d` nor `git branch --merged` will report your
+branch as merged. Both of these tools are built for the merge workflow instead.
+
+To see if your work was merged in patch-based workflows, use
+[`git-cherry(1)`](https://git-scm.com/docs/git-cherry). Then you can safely
+force deletion of the branch with `git branch -D`.