web-dev-qa-db-ja.com

コミット履歴を削除せずにgitブランチを削除/非表示

状況:

私はメインのリポジトリとメインのdevブランチを持ち、そこから多くの「実験」ブランチが発芽しています(例:exp1およびexp2)。これらの実験ブランチの目的は、数値結果を生成する実験のプレースホルダーとして機能することです。実験ブランチのブランチ名(およびコミットID)を記録して、コミットに戻って結果の背後にあるコードと履歴を正確に確認できるようにします。

しかし、現在、実験ブランチが多すぎるため、メインツリーが見づらくなっています。したがって、私は各結果セット(つまり、各実験)の背後にあるコードにプレースホルダーを保持するための私の戦略を再考しています。もちろん、各ブランチで作業ディレクトリを保存することもできますが、コミット履歴も保持しておくといいでしょう。

可能な解決策:

これに対処する1つの方法は、実験ブランチを独自の独立したリポジトリに移動することです。それぞれのリポジトリは、devブランチのコミット履歴の適切なノードの子ノードをルートとします。ここに私が何を意味するのかを示します:

enter image description here

画像の拡大版(imgur.com)は ここ をクリックしてください。

したがって、たとえば、ブランチexp1、コミットをエクスポートしたいA->B->CをコミットAをルートとする別のリポジトリに追加します。次に、コミットのハッシュを記録できますP1どこにいるかわかるようにexp1の子孫です。

質問:

どうやってやるの?

より良い質問:

一方、私がやりたいことを行うにはもっと良い戦略があると強く思います---つまり、視覚的な検査のためにツリーを整頓しますが、必要に応じてプレースホルダーを前のブランチに保持し、それらに戻ることができるようにします。それで、誰もがこのための戦略を推奨できますか?

27
synaptik

これは1つの代替方法です。ブランチ名を削除する前に、ブランチ以外の参照を使用してブランチのヒントを保存します。

これらは非分岐参照であるため、たとえばgit branchの出力や、git log --branchesgitk --branchesで表示されるものには表示されません。ただし、それらは--allリストに表示され、リポジトリオブジェクトは保持されます。

非分岐参照を作成または更新するには、 git update-ref を使用します。将来の使用と衝突しないと思われるrefs/内の名前空間を選択します(現在の使用は、ブランチの場合はrefs/heads/、タグの場合はrefs/tags/、リモートブランチの場合はrefs/remotes/、メモの場合はrefs/notes/、隠し場所の場合はrefs/stash)。

18
torek