git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: Question about 'branch -d' safety

From
Junio C Hamano <gitster@pobox.com>
Date
Jul 19, 2010, 18:06 UTC
Message-ID
<7v7hkrpcrk.fsf@alter.siamese.dyndns.org>
In-Reply-To
<20100717093006.GA11452@localhost>
Clemens Buchacher <drizzd@aon.at> writes:
> Pros and cons for "undeleting branches":
>
> + safety net
> It should not be easy to lose information with git.

I am personally not very convinced by this argument when it comes to the cases where the user actively asks us to remove something.

Show 6 quoted lines
> + less dependant on git branch -d
>
> Since git branch -d deletes branches which have been merged to a
> remote tracking branch, it does no longer guarantee that the branch
> is still available in history locally, and if the branch is also
> deleted remotely, running git remote prune removes it entirely.

Sorry, I have no idea what you are talking about in this paragraph. I cannot read "Who depends on git branch -d to achieve what" from your description. All I read in the above description is that what the command does is a good thing. If you want to keep the remote tracking branches around, don't run "branch -d". If you do want to remove the history of a branch, run "branch -d". Isn't it that simple?

Perhaps the missing "achieve what" may be that "output from 'git branch' is too cluttered if I don't remove already merged branches as early as possible, and forces me to run 'git branch -d' to clean things up too often"? If that is the issue you are trying to address, perhaps we can solve that in a more direct way, e.g. "git branch --no-merged" easier to access?

Show 14 quoted lines
> - user interface complexity
>
> How to prune deleted branches? Currently, it is enough to do "git
> branch -D branch; git gc --prune" in order to get rid of the branch
> objects, at least if the HEAD reflog does not contain it or has
> expired. Consider for example adding a remote, and removing it
> again. This operation would leave a bunch of deleted branches,
> which potentially occupy a lot of disk space.
>
> How to find and restore deleted branches? If the reflog is used to
> record deleted branches, and a new branch of the same name is
> created, the reflog contains entries from unrelated branches. [1]
> If the deleted reflogs are stored in an attic, how do we reference
> those?
This is the area I am most concerned about.

If you take an analogy in say a file server implementation, yes, it should not be easy to lose information there. But it is and should be easy to say "rm junk". How would people recover from a mistake if they typed a wrong filename, "rm junio" to lose a precious file "junio", when they meant to lose "junk"? They go to backups. Can't git users do the same? After all, .git directory is stored on a filesystem of some sort, and taking a backup (you do take backups, don't you?) and picking the stuff you lost from there should be a standard procedure that can be learned outside of the context of git.

This is pretty-much a tangent, but I recall from time to time people wonder why the branch namespace is not flat. If that is a common wish, your "tilde-suffix all the intermediate path components" trick could be used in later versions of git (perhaps 1.8.X series) to improve the system to allow "maint-1.7.0" branch and topic branches that forked from it e.g. "maint-1.7.0/fix-frotz" and "maint-1.7.0/fix-nitfol" peacefully co-exist.

Previous: Jakub NarebskiNext: Clemens Buchacher
Message 38 of 42 in “Question about 'branch -d' safety”
  1. Nanako ShiraishiDec 29, 2009
  2. Nicolas SebrechtDec 29, 2009
  3. Nanako ShiraishiDec 30, 2009
  4. Junio C HamanoDec 30, 2009
  5. Nicolas SebrechtDec 30, 2009
  6. Clemens BuchacherJul 10, 2010
  7. Jonathan NiederJul 10, 2010
  8. Jakub NarebskiJul 10, 2010
  9. Jonathan NiederJul 10, 2010
  10. Clemens BuchacherJul 11, 2010
  11. Jakub NarebskiJul 11, 2010
  12. Julian PhillipsJul 11, 2010
  13. Clemens BuchacherJul 11, 2010
  14. Junio C HamanoJul 11, 2010
  15. Jakub NarebskiJul 11, 2010
  16. Will PalmerJul 11, 2010
  17. Clemens BuchacherJul 12, 2010
  18. Junio C HamanoJul 12, 2010
  19. Clemens BuchacherJul 13, 2010
  20. Will PalmerJul 13, 2010
  21. Johannes SixtJul 13, 2010
  22. Will PalmerJul 13, 2010
  23. Clemens BuchacherJul 13, 2010
  24. Clemens BuchacherJul 17, 2010
  25. Jonathan NiederJul 18, 2010
  26. Jakub NarebskiJul 18, 2010
  27. Will PalmerJul 18, 2010
  28. Jakub NarebskiJul 18, 2010
  29. Will PalmerJul 19, 2010
  30. Jakub NarebskiJul 19, 2010
  31. Joshua JensenJul 19, 2010
  32. Clemens BuchacherJul 19, 2010
  33. Will PalmerJul 19, 2010
  34. Jakub NarebskiJul 19, 2010
  35. Joshua JensenJul 20, 2010
  36. Will PalmerJul 20, 2010
  37. Jakub NarebskiJul 19, 2010
  38. Junio C HamanoJul 19, 2010
  39. Clemens BuchacherJul 19, 2010
  40. Jakub NarebskiJul 19, 2010
  41. Ævar Arnfjörð BjarmasonJul 20, 2010
  42. Matthieu MoyJul 20, 2010

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.