Remove/hide git branches without deleting commit histories
I have a main repo with a main dev branch and lots of “experiment” branches sprouting off from it (e.g.,
exp2). The purpose of these experiment branches is to serve as placeholders for experiments that generate numerical results. I record the branch name (and commit ID) of the experiment branches so I can return to the commits to see precisely the code and history behind the results.
But, now, there are so many experiment branches that it’s getting hard to see the main tree. So, I’m rethinking my strategy for keeping placeholders to the code behind each set of results (i.e., each experiment). Obviously I could just save the working dir at each branch, but it would be nice to keep the commit history also.
One way to deal with this is to move the experiment branches into their own independent repos, each being rooted at the child node of the appropriate node in the commit history of the dev branch. Here’s an illustration of what I mean:
Click here for larger version of image (on imgur.com).
So, for example, for branch
exp1, I would like to export commits
A->B->C to a separate repo rooted at commit
A. Then, I can just record the hash of commit
P1 so that I know where the
exp1 branch descended from.
How can I do that?
On the other hand, I strongly suspect there is a much better strategy for doing what I want to do—namely, unclutter the tree for visual inspection but keep placeholders to prior branches so I can return to them if needed. So, can anyone recommend a strategy for this?
One Solution collect form web for “Remove/hide git branches without deleting commit histories”
Here’s one alternative: use non-branch references to save the branch-tips before deleting the branch names.
Since these are non-branch references, they won’t show up in
git branch output, nor in stuff shown by
git log --branches and
gitk --branches, for instance. However, they will show up in
--all listings, and will retain repository objects.
To create or update a non-branch reference, use
git update-ref. Choose a name-space within
refs/ that you think will not collide with some future use (current uses are
refs/heads/ for branches,
refs/tags/ for tags,
refs/remotes/ for remote branches,
refs/notes/ for notes, and
refs/stash for the stash).