2017-01-26 7 views
0

私はちょうどブランチポインタについて話しているだけではありません:-)gitリポジトリからブランチ全体を削除できますか?

私は既に完全にマージされたブランチを持っていますが、今はそのブランチが存在しなかったように見せたいとします。完全性を犠牲にすることなく、そのブランチのリポジトリからそのブランチを完全に削除することができるはずです(つまり、ブランチ上のコミットをすべて削除して履歴に表示されないようにする必要があります)。それを行う方法はありますか?

残っているブランチを上流に押し込むことはできますか?

編集:私はこれより良い

git checkout master 
git commit -m "C1" 
git branch b1 
git commit -m "C2" 
git checkout b1 
git commit -m "C3" 
git checkout master 
git merge -m "C4" b1 
git branch -d b1 

を試してみて、説明するために例で追加しましたが、私が何をしたいのか、この結果に

--C1--+----C2----+--C4 
     \  /
     +--C3--+ 

を与えるC3を削除しても、正確にそれとしてC4を残していますそう、歴史が線形に見えるように。 C4のsha-1はC3があるかどうかにかかわらず同じだから、なぜ私がrebase/cherryを実行する必要があるのか​​わからない。

+0

あなたは分岐がポインタである知っています。トムとジャックの2つの名前があるとします。あなたはコミットしている、ジャックとトムは2つの支店です。もしあなたがジャックという名前を削除し、あなたのコミットをプルーンするなら、トムはどうなるでしょうか? – ElpieKay

答えて

-1

$git branch -d

2

はい、それは完全にブランチを削除することが可能です:

git branch -D branchname 
git push origin :branchname 

-Dも、分岐がマージされていないブランチを削除する力です。

+0

これは私にはブランチポインタを削除するだけのようです。実際のブランチ自体(ブランチ上にあったすべてのコミット)を削除したい – Andy

+0

@Andyブランチを削除してコミットが他のref(ブランチ、タグなど)によって指されていなかった場合、ガベージコレクタそれらをきれいにするでしょう。それらが他の参考文献によって参照されていれば、あなたはそれらを "完全性を犠牲にすることなく"取り除くことはできません。 –

+0

@Andy、実際にはポインタではなく分岐を削除します。 Dan Lowe氏が言ったように、ブランチのコミットの一部が他のブランチの一部でもある場合、これらのコミットを削除することはできません。 –

0

は、次のコマンドを使用していることを行うことができます。各コマンドの

git branch -D branchname. 
git reflog expire --expire=now --all 
git gc --aggressive --prune=now 
git repack -a -d -l 

詳しい情報はgitのドキュメントで提供されています:https://git-scm.com/docs

関連する問題