2017-09-19 5 views
0

私はコマンドgit log --oneline --decorate --graph --all実行したときに、私は次のグラフを持っている:ヘッドはどの支店ではないのでGitの独立ヘッド&チェックアウト

* 7ee76a4 (HEAD) added 2.txt 
| * 2ff2a0c (master) changed line of 1.txt 
|/ 
* 9a0825b Initial commit 

を私がチェックアウトするときには、git checkout master 'で「マスター」の枝を言うことができますHEAD」は消え行くとグラフが結果として私が持っている:

* 2ff2a0c (HEAD -> master) changed line of 1.txt 
* 9a0825b Initial commit 

私が持っている問題は次のとおりです。
は7ee76a4が削除されます実際にコミットするべきではないでしょうか。私はgit checkout 7ee76a4を実行するとグラフには表示されませんが(削除されているように見えますが)、Gitは前の状態に戻ります(つまり、コミットは削除されません)。

何か忘れていますか?

+0

それはちょうど隠れています。 'git log --oneline --decorate --graph --all 7ee76a4'では、それを見ることができます。 '7ee76a4'という値を忘れた場合、' git reflog'で見つけることができます。 – ElpieKay

答えて

1

それは(hereを参照)にgitにコミットを削除するのは簡単ではありません。あるブランチからコミットに到達できなくなったら、unreachableになります。それはまだそこにあり、あなたはそれがまだidでそれをチェックすることができます。 Gitのreflogは、reflogの設定に応じてしばらく参照を保持します。 reflogがコミットを参照しなくなった場合にのみ、コミットはdanglingになります。しかし、それは次のgarbage collectionが実際にそれを削除するときにのみ削除されます。

このプロセスは、しかし、あなたの設定や作業速度(より頻繁にあなたがGitの操作を実行するので、より高速な古いコミットはあなたのREFLOGの外に落ちる)に応じて、数週間まで数日かかります。

現在のHEADから到達できない(つまり、ブランチからアクセスできない)ため、グラフにはコミットが表示されません。これはではなく、という意味です。

+0

だから、すべての開発者が選ぶべき共通のアクションは、コミットがそこにあることを気にするべきではないということです(もちろん隠されています)。ガベージコレクタは将来、ガーベッジコレクタを削除する可能性があるため、ガーベジコレクタが必要です。右? – ekalyvio

+0

そうです、それは通常行われている方法です。あなたが明示的にそれを探すのでなければ、コミットはどこにも現れないので、気にする必要はなく、最終的にガベージコレクションされます。 – kowsky

+0

コミットにパスワードのような機密情報が含まれている場合、リポジトリから完全にパージされていることがわかります。この問題について([この](https://stackoverflow.com/questions/872565/remove-sensitive-files-and-their-commits-from-git-history)のような)いくつかのquestonsがあります。 – kowsky

関連する問題