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

Re: Question about 'branch -d' safety

From
Clemens Buchacher <drizzd@aon.at>
Date
Jul 17, 2010, 09:30 UTC
Message-ID
<20100717093006.GA11452@localhost>
In-Reply-To
<20100711133730.GA10338@localhost>
Hi,

I am not sure how to proceed with this. It seems like there are many arguments against it, and few for it. So in order to get a better idea where we stand, I have summarized the arguments so far below.

I do not know which solution would make everyone happy. But I think there are a few advantages to be considered, and the remaining issues are not insurmountable.

Clemens ---

Pros and cons for "undeleting branches":
+ safety net

It should not be easy to lose information with git. In most cases branches can be restored from the HEAD reflog, but it can be complicated if the branch has never been checked out. Even the trivial case is not as obvious as searching for a "Branch deleted" entry in the reflog.

+ 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. In that sense, it cannot be considered safe any more. Being able to restore deleted branches would make this a non-issue.

+ automatically prune remote tracking branches

Once it is easy to restore deleted branches, there is no need to keep around remote tracking branches which have been deleted on the remote. They can be pruned automatically on git fetch.

- only a convenience

Considering the many potential issues for this corner case, why bother implementing it? Deleted branches can be restored from the HEAD reflog anyways.

- implementation complexity

Due to the possibility of D/F conflicts, "deleted reflogs" have to be renamed internally. This makes the reflog implementation more complex.

- 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?

[1] Also, what happens if that new branch is renamed?
Previous: Clemens BuchacherNext: Jonathan Nieder
Message 24 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.