Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Git branch deletion

In Git, what does "deletion" of a branch mean?

Will it be gone from the repository? Or will it still be navigable to via git branch?

What I really want to do is mark a branch as "dead end", i.e., the branch is so far from master, that nobody should use it as a starting point, though there were some good ideas down that branch, so we'd like to keep it, for reference.

like image 508
bobobobo Avatar asked Feb 26 '10 15:02

bobobobo


People also ask

How do I delete a new branch?

You'll often need to delete a branch not only locally but also remotely. To do that, you use the following command: git push <remote_name> --delete <branch_name>.

Should git branches be deleted?

They're unnecessary. In most cases, branches, especially branches that were related to a pull request that has since been accepted, serve no purpose. They're clutter. They don't add any significant technical overhead, but they make it more difficult for humans to work with lists of branches in the repository.

Does deleting a git branch remove history?

In Git, branches are just pointers (references) to commits in a directed acyclic graph (DAG) of commits. This means that deleting a branch removes only references to commits, which might make some commits in the DAG unreachable, thus invisible.


2 Answers

You can delete the branch, but tag it first, so that it's history doesn't disappear. This way, the branch doesn't show up in the branch list, which should hopefully deter people from working on it, but the work won't be permanently erased (even after garbage collection is run). For instance, whenever I have a branch that has become irrelevant, but I'm not prepared to permanently delete it, I tag it as "archive/<branch-name>".

While on master or some other branch:

git tag archive/foo foo git branch -D foo 

This creates a tag named archive/foo from the foo branch before deleting foo. You can also add a message to the tag, that explains what is in the branch, why it existed, why it's now a dead end, etc.

git tag -m 'Foo is deprecated in favor of bar' archive/foo foo 

The ability to record why a branch is being deprecated is perhaps an advantage of tagging versus moving branches to an alternate namespace.

If you ever need to resurrect a branch that has been archived this way, it's as simple as:

git branch foo archive/foo git tag -d archive/foo       # Optional 

Now the branch is back as though it was never deleted.

like image 56
Dan Moulding Avatar answered Sep 24 '22 06:09

Dan Moulding


Git branches are stored as references to a revision. If you delete the branch, the reference is removed; if nothing else references that revision, it will eventually be garbage collected. Also, if you delete the branch then it's properly gone (from your repository). If you want to mark a branch as deprecated but keep it around for later use, you could move the branch to a subdirectory:

$ git branch * master   testing_feature_one   testing_feature_two $ git branch -m testing_feature_one deprecated/testing_feature_one $ git branch   deprecated/testing_feature_one * master   testing_feature_two 

Alternatively, you could create a separate repository for deprecated branches, pull them across then delete them from the original. In either case, you're going to affect any users who are following the branches -- the content of their repository won't change (and neither will any of their branch names), but if they try to pull again, they'll have to change their target in their configuration.

like image 38
Andrew Aylett Avatar answered Sep 23 '22 06:09

Andrew Aylett