2016-07-10 9 views
5

.git/logに気付きましたが、gitが隠しコミットを保存する場所を検索していました。ことがわかった:.git/logの目的は何ですか

$ ls .git/logs/ 
HEAD  refs 
$ diff .git/refs/ .git/logs/refs/ | head -n3 
Common subdirectories: .git/refs/heads and .git/logs/refs/heads 
Common subdirectories: .git/refs/remotes and .git/logs/refs/remotes 
diff .git/refs/stash .git/logs/refs/stash 

stash意味 - logsでのみ固有のファイルです。しかし、このフォルダの根拠を明らかにしていません。だから.git/logの目的は何ですか、なぜgitは参照を複製しますか?

答えて

1

ログ レコードは、このディレクトリに保存されています。詳細については、git-update-ref 1を参照してください。 $ GIT_COMMON_DIRが設定されていて、代わりに "$ GIT_COMMON_DIR/logs"が使用されている場合、このディレクトリは無視されます。

参考文献:gitrepository-layout

1

これは過去にリポジトリ内のさまざまな参照が指し示してきた履歴を記録する "reflogs"です。

git help reflogと、-g, --walk-reflogsのドキュメントgit help logを参照してください。

diff -rを実行した場合、refs/ファイルにはすべて1回のコミットが含まれ、logs/refsには履歴ファイルが含まれているため、さらに多くの違いがあります。

refs/ディレクトリを参照することは、一般的に、リポジトリ内の参照を探すのには適していないことに注意してください。 「緩い」と同様に、参照はpacked-refsにのみ存在し、refs/ディレクトリには対応するエントリがありません。

1

logsディレクトリには、Gitにreflogsが格納されています。 Reflogは、ある時点のあなたの参照が何を指していたかを示します。 Reflogsはgit commit --amend,git rebaseなどの後でも元のコミットを保存します。git pullが数十回コミットしても、Reflogは1回のコミットを保存します。 Reflogにより、特定の操作を元に戻すことが容易になります。

あなたが持っているすべての参考文献、および過去のすべての参考文献には、reflogが存在するのが普通です。 git stashコマンドを使用して、しばらくの間stashのrefを取得しました。今すぐrefを持っていなくても、reflogは覚えています。これにより、例えば偶然のブランチ削除を元に戻すこともできます。レフリーに加えられた変更の

関連する問題