2012-03-29 11 views
2

私は通常働いている2つのブランチを持っています:masterとhomepage_buildout。私は最近、私がプロジェクトに取り組む前から古いコミットをチェックアウトするように言われました。私は単純でした:コミットを削除せずにgitを削除ブランチ

git checkout [commit number] 

は、その後、私はこの古いがそうのようにブランチをコミット作ることを決めた:

git checkout -b old_homepage 

は今、私は私はもうブランチold_homepageを参照できるようにする必要がないことに気づきましたしかし、私はまだそれがコミットとして存在したい。私はそれらのコミットを保持するが表示されてからブランチを削除するにはどうすればよい私が入力したとき:タグはコミット参照

$ git tag <tagname> <commit-hash> 

ので、それは得ることはありませんゴミ:

git branch 
+0

削除するブランチ上のコミットをmasterとマージしたいのですか? – learnvst

+0

コミットが 'master'(または他の任意のブランチ)の祖先であると仮定すると、ブランチが非早送りの方法で変更されない限り、コミットは消えません。 –

答えて

8

私はあなたが実際に求めているものをがに沸くと思う:「私はコミットがgit branch -d old_homepageを迷子になるならば」と、答えは:「名前を削除するだけ名前を削除します。コミット自体が付きますあなたがそれらをgit log --allで見ることができる限り、そして実際にはさらに長くなります。

これをよりよく視覚化するには、gitk --allまたはgitk --tagsのようなものを実行します(いくつかの複雑なgit reposで両方を試してください)。コミットをスクロールします。今度はコミット時に付箋を書くことを想像してみましょう。これは「タグ」または「ブランチ」の名前です。付箋を消してください。コミットはまだそこにあるのですよね? :-)

コミットのようなことはいつ行われますか実際にはは去っていますか?答えは:すべてにつながる名前を削除した後です。 gitkコマンド(ほとんどの他のgitコマンドと同様)は、HEADという名前で始まります。 --allとすれば、見つけられるすべてのブランチ名が追加されます。 --tagsとすれば、見つけられるすべてのタグ名が追加されます。それから、それは後方に働いて、それぞれのコミットを参照して、それが参照する他のコミットを見ます。

Gitは、これらの明白な名前の1つから始まり、逆方向に作業することで、見つけられないときには、物事(コミットなど)を削除します。 (たとえそうであっても、デフォルトでは30〜90日という長い時間を待っています)。例えば、git logを実行して見つかった番号の古いコミットにブランチまたはタグ・ラベルを追加すると、コミット番号。再度削除するのは、でない限り、という名前で検索するのは安全です。

+1

これは正解です。古いコミットがいくつかのブランチの履歴にあれば、それは消えません。必要に応じて、簡単にアクセスできるようにタグを付けることができますが、保存目的では必要ありません。そのコミットが孤児になるような方法でブランチの履歴を書き直さない限り(そして、それが起こるためにそれを実行しようとしている可能性があります)、コミットはいくつかある限りそれはその歴史の中にあります。 – wadesworld

+0

ありがとう、torek!それはまさに私の質問でした。 – Rustavore

2

あなたがコミットにタグを付けることができます-集めました。

0

私は確信していませんが、そのような状況では通常タグを使用します。

git tag <some-name> <commit-id> 

それはgit-branchに表示されませんが、git-tagは、それが表示されます。

関連する問題