2009-05-12 14 views

答えて

4

私はそれが範囲だと思います。 ".."コマンドは、起点/マスターの最後のコミットと、作業中のブランチの最後のコミットとの間のコミットを表示します。

また、あなたは後にそれを置くことによって比較したいブランチを指定することができます..それはあなたはまた、例えば、出力をフィルタリングするためにコミット識別子を使用することができます

git log origin/master..<branch_name> 

となりますので

git log 663f4c..fec6b 

git log(同様の議論のセットを取り、他のすべてのGitコマンド)で

46

:-)他のオプションを見るためにgit help logを試してみて、それをある範囲のリビジョンを見つける方法の仕様です。 Gitの一般的な世界では、リビジョングラフのサブグラフを意味しています。ほとんどの人にとって、一般的にリスト内のリビジョン範囲を意味します。 (もし分岐してもそれほど多くをやらなければ、Gitでも単純化します)。

改訂仕様には、正の参照(開始点)と負の参照(停止点)と追加のフィルタ(リビジョン数の制限、grepコミットテキストなど)が含まれています。 Gitは正の参照で始まり、改訂履歴に戻って、負の参照から到達可能なリビジョンに遭遇したときに停止します(必ずしも負の参照自体に達していなくてもかまいません)。

進化したさまざまな簡略表記があり、これをすべて使いやすくするために、何とかして混乱させてしまうのはむしろ混乱しているかもしれません。 「maint」、「maint..master」などとはどのようなものを使用するかを意味します。

「origin/master」と言うと、「origin/master」は正の参照であり、負の参照はありません。だからGitはorigin/masterで始まり、すべてのリビジョンを利用して、元の/マスターの完全な履歴を取得します。

「origin/master ..」は、「origin/masterからHEAD」を意味するように見える「origin/master..HEAD」の略語です。それは効果的です。これは、 "HEAD^origin/master"または "HEAD --not origin/master"と書き換えることができます。この場合、HEADは正の参照値であり、 "origin/master"は負の参照値です。だからGitはHEADで始まり、元の/マスターから到達可能なリビジョンに出会うまでグラフを歩みます。実際には起源/マスター自体に遭遇する可能性があります。すべての参照が包括的であることに注意してください。正の参照自体は出力され、負の参照はありません(あなたが-boundaryを与えてからフラグが立てられない限り)。つまり、HEADとorigin/masterが同じリビジョンの場合、「origin/master..HEAD」は何も出力しません。

あなたは上流のバージョンの上にローカルコミットのカップルを作っているのであれば、あなたがこのような状況があります。

[email protected]:~/src/git <master>$ git log --pretty=oneline --abbrev-commit --decorate -n 4 
ea3107d (refs/heads/master) Add another dummy comment 
869c260 Add dummy comment 
6345d7a (refs/remotes/origin/master, refs/remotes/origin/HEAD) Merge branch 'maint' 
be427d7 allow -t abbreviation for --track in git branch 

そして今「/マスターgitのログ起源は..」Gitはで開始されることを意味しますHEAD(ea3107d)は、origin/masterから到達できないので、それを表示します。それからそれはHEADの親(869c260)に戻りますが、まだそれは印刷されていません。その後、次の親は6345d7aです。のorigin/masterなので、停止します。

"git log ..origin/master"は逆です - 起点/マスターからHEADに戻って行きます。この場合、何も印刷されません。しかし、 "origin/maint"をチェックアウトした場合、origin/maintにない原点/マスタのリビジョンが印刷されます。したがって、一般的に "A..B"を "BのリビジョンA "を意味し、AまたはBを省略すると" HEAD "を意味することに注意してください。

ちょうど余分な超々しい混乱のために、表記 "A ... B"もあります。だから点数を数えて覚えておいてください! AとBが改訂の行にある場合、実際の違いはありません。しかし、 "A ... B"とは、AとBのどちらのマージベースにもないリビジョンを意味します。したがって、AとBが分岐しているブランチ上にある場合、彼らは発散した。

リビジョン範囲( "B - なしA")の "長い形式"は、 "リモート追跡ブランチにないすべてのリビジョン"( "--branches - -not --remotes ")。この引数リストはgitコマンドを含む多くのGitコマンド( "git rev-list"がコアとなる)によって解析されます。だから、 "gitk --branches --not --remotes"を使ってローカル変更をグラフィカルに見ることができます。

最後に、メガボーナス混乱のために、 "git diff"のようなコマンドは、同じ種類の簡略構文を受け入れますが、(全く)同じことを意味するわけではありません。 git diffは実際には2つのリビジョンを取り、それらを比較します。これは範囲と同じではありません。Gitのリビジョン範囲は単なるリストではなくサブグラフです。 "git diff A..B"は "git diff A B"に相当します。 "git diff A ... B"は "Aから分岐したのでBの変化を示す"という意味です。混乱している?ちょっとだけ:例えば、 "git log A ... B"と "git log B ... A"は同じことを意味するが、 "git diff A ... B"と "git diff B ... A "しないでください。

+1

を説明しているgit-rev-list(1)のマンページを参照してください。構文 –

20
git log origin/master 

は(偽のコマンド)のようになる:

git log INITIAL..origin/master 

中:

git log origin/master.. 

は、次のとおりです。意味を覚えて

git log origin/master..HEAD 
+0

これは、簡単な答えを探しているなら、素敵で短くて甘い答えですが、明らかにaraqnidの答えははるかに堅牢で説明的です。 – patrickvacek

+0

私はaraqnidの答えがどのような価値を持っているかわかりません。鉱山は質問された質問に答えます。 – FelipeC

+0

あなたの答えはその質問に答えるので、私はそれをアップしました。私もaraqnidの答えをupvoted、それはまた質問に答えるので、より完全な方法で。私はあなたの答えのシンプルさに感謝しますが、もう一つはより詳細なコマンドを説明しています。 – patrickvacek

1

私自身のニーモニックの方法.. 。

私はを開始 日付範囲の面で「gitのログstart..end」を考える

は歴史古い部分、およびより最近の歴史ため終了を表します。しかし、日付範囲とは異なり、範囲をコミット線形ウォークバックではなく、実際のタイミングではなく、設定された減算、すなわちとは関係ありません:

(commits reachable from "end") - (commits reachable from "start") 

ことをコミット中(除外する)開始を忘れないでくださいrangeは、1つ以上のコミットのセットを表し、1つのコミットを表しません。

効果的には、 '開始'(排他)と '終了'(両端を含む)の間に作成されたすべてのコミットを指します。

関連する問題