8

何かが足りない。以前は Mercurial を使用していて、リポジトリのリビジョン履歴をhg log. シンプル:リポジトリでこれまでに作成されたすべての変更セットが表示されます。

今、私はgitを使用しています。新しいツールを学ぶことにとても興奮していますが、 で見ているものに戸惑っていgit logます。私はいくつかの変更を行い、いくつかのコミットを行いました。別の人がリビジョンを作成し、同様にコミットしました。私は彼のリポジトリから引き出しました。私がやったのですがgit log、彼の変更セット (git では「commit」と呼ばれているかもしれません) がリストにありません。彼のハッシュ番号 (つまりgit log <hash>) を明示的にリストすると、一番上に表示されます。だから私のレポにありますが、私がgit log.

を見てみるとgit help log、説明に「コミットログを表示する」と書いてあります。私の観点からすると、それは正しくありません。または、実際にはそれらのサブセットを示しているため、不完全かもしれません。しかし、どのサブセットが何を表示するかを決定する方法もわかりません。

誰かgit logが私に説明できますか?

アップデート

ところで: 私が最初に試したことの 1 つは --all でした。今では、多くの人がそれを提案していることがわかります。しかし、それも示していません。

$ git log | grep fb2a17c5fb08498e7f2ab364931fddc379be106f 
$ git log --all | grep fb2a17c5fb08498e7f2ab364931fddc379be106f 
$ git log fb2a17c5fb08498e7f2ab364931fddc379be106f  | grep fb2a17c5fb08498e7f2ab364931fddc379be106f 
commit fb2a17c5fb08498e7f2ab364931fddc379be106f
4

3 に答える 3

16

git log参照または参照のセットを指定しない場合は、暗黙の引数があります。現在の頭です。そう

git log

に展開します

git log HEAD

これは、現在の HEAD (次のコミットがアタッチされる場所) から到達可能なすべてのコミットを表示することを意味します。

同僚の作品を見るには、

git log origin/master

あなたがマスターで作業していて、すでにフェッチしていると仮定します。

git では、フェッチはリモートからコミットを取得することを意味しますが、ローカル ブランチは更新しませんgit pullフェッチしてから、ブランチをフェッチしたものとマージします。何が行われたかをフェッチし、検査してから、強制プッシュで行われたことをマージまたはリベースするか、さらには拒否することをお勧めします - 状況とワークフローによって異なります。

通常、フェッチ後にリモートで何が行われたかを確認するには、次のことができます

git log ..origin/master

これは本当に展開します

git log HEAD..origin/master

演算子は、..「この参照から到達可能なコミットを除外する」と「この参照から到達可能なコミットを含める」を組み合わせた省略形です。したがって、次のように書くこともできます。

git log ^HEAD origin/master

参照の^先頭にある は、ここから到達可能なコミットを除外することを意味します。この場合、それはあなたがどこから到達できるかを意味します。結果は、サーバーからフェッチされたばかりのこのブランチのコミットのリストになります。

すべてのブランチとリモート ブランチを への引数としてリストする代わりに、次のパラメータgit logを使用できます。--all

git log --all

これにより、すべてのブランチ (ローカルおよびリモート トラッキング) とタグから到達可能なすべてのコミットが表示されます。

git log見たいコミットのセットベースの削減をどのように行うことができるかにより、非常に強力なコマンドです。..知っておくとよい構文です。...指定された両方のブランチからそれらの共通の祖先までのコミットを含めるように言うものもあります。

この歴史の歩みが、git を非常に強力にし、非常に多くの興味深いワークフローをサポートできるようにしています。

アップデート:

git は、そこに保存されているツリーに含まれているものとその親とが同一であるコミットに遭遇すると、マージを実行するときにコミットを一覧表示しません。

git log --all --sparse

それらのコミットを除外しません。

http://linux.die.net/man/1/git-logの歴史の単純化セクションを参照してください

また、ブランチをリセットしたり、友人がリセットしたりして、再度フェッチするとその参照が失われたことを意味する場合もあります。sha1 で git log を実行し、それに --decorate を追加すると、どのような出力が得られますか? また、試してみてくださいgit log --walk-reflogs

于 2012-07-20T19:07:54.857 に答える
1

git logこれ以上明示的な引数を指定しないと、現在チェックアウトしているコミットの履歴が表示されます。他のブランチやコミットを見たい場合は、git log何を見たいかを伝える必要があります。

git log --all

すべてのブランチのすべてのリビジョンを表示する必要があります。

簡単にグーグルで検索できる優れたチュートリアルがたくさんあります。

于 2012-07-20T17:39:44.687 に答える
0

その通りです --- デフォルトでは、git log はコミットのサブセットのみを表示します。デフォルトでは、git log は現在のブランチの先端から見えるコミットのみを表示します。あなたの友人のコミットはまだあなたの現在のブランチにないため、git ログには表示されません。

于 2012-07-20T17:40:53.983 に答える