0

説明できないかなり奇妙な結果が得られました

2つのブランチの違いを判断したかった

だから私はタイプした

git log master..release1

そして、 aa11bb22cc33など、複数のコミットがあります。

でもその後電話した

git branch --contains aa11bb22cc33

そして、私は持っています

release1
* master

どうしてこうなった!?

私の git log コマンドは、定義上、リリース 1 では到達可能であり、マスターでは到達できないコミットのみを表示する必要がありますか?

私も同等のものを試しました

git log ^master release1

同じ奇妙な結果で。

どのようにそれが可能であるかを説明してください。

PS git 1.8.0

4

1 に答える 1

0

いくつかのマニュアルページを見ると、次のようなものだと思います:「Bからは到達可能であるが、Aからは到達できないもの」man gitrevisionsと言っていますが、引用したように、この「到達可能」は厳密なDAG(有向非巡回グラフ) センス (つまり、「到達可能」は「の祖先」を意味します)。<A>..<B>

実際、git logマンページには、「2 つのコミット<A>..<B>のコミットのみを表示する」と記載されています。後者は、ドットドット演算子が私にどのように説明されたかにも同意します。

ただし、DAG の意味では、ブランチはなく、コミットのみです (ブランチはコミットへの参照のみです)。したがって、コミット X が「B に含まれている」場合、実際には B の祖先、つまり B から到達可能です。Git 履歴グラフでは、すべてのコミットに関係 (「ポインタ」、または矢印) があるためです。描画されたグラフ) をその祖先に渡します。

お役に立てれば。

編集:私が言及するのを忘れたのは、あなたのコミットがログに表示されるのに、ブランチ --contains がマスターと他のブランチの両方を表示する理由です。知っているとばかり思っていたのに、結局知らないことがわかった。関連するブランチを示す出力を投稿するgit log --oneline --decorate --allと、より具体的な説明で回答を更新できるかもしれません:)

于 2013-01-18T08:10:57.137 に答える