2017-02-15 4 views
2

git merge --no-ffに関するドキュメントを読んでいます。git log after git merge --no-ffは、他のブランチからのすべてのコミットを表示します。

私が試した結果は次のとおりです。

Mini-de-MiniMac:ZtestGit minimac$ git branch 
    feature 
* master 

Mini-de-MiniMac:ZtestGit minimac$ git log --pretty=oneline 
82307080064b764c28622351a4c28abb4f9302b8 Merge branch 'feature' with --no-ff option 
50d9f108d70798a13cc25fb7321d57ad5ba61854 three 
d7163bc5320162689544293be1ac2228c6e3dc34 two 
a7ba4c797d49d940a7d64a8ddaba787eb013622a one 
cc3e4abf5dfad7779de3837a6c4e6e29e3ca87b2 start 

Mini-de-MiniMac:ZtestGit minimac$ git log --pretty=oneline --graph 
* 82307080064b764c28622351a4c28abb4f9302b8 Merge branch 'feature' with --no-ff option 
|\ 
| * 50d9f108d70798a13cc25fb7321d57ad5ba61854 three 
| * d7163bc5320162689544293be1ac2228c6e3dc34 two 
| * a7ba4c797d49d940a7d64a8ddaba787eb013622a one 
|/ 
* cc3e4abf5dfad7779de3837a6c4e6e29e3ca87b2 start  

私はそれについて驚いて、私は理解していない:masterブランチ番組でgitのログをすべてのコミット(1、2、3)これらのコミットマスターではなく機能ブランチ上にあります。

私は、マスターブランチの最後のコミットが、フィーチャーブランチの前回のコミットチェーンの子孫であることを理解しています。私はマスターブランチにrebaseのように持っていて、マスターの最初と最後のコミットだけを見たいと思っていました。なぜそれが違うのか私に説明できますか?

git merge --no-ffはgit log --graphで動作するようになっていますが、git logでは動作しませんか?

私はフィーチャブランチを削除すると、ブランチは削除されますが、git logとgit log --graphは前と同じ結果を返します。コミットとフィーチャブランチはまだ表示されます。
説明がありますか?

Mini-de-MiniMac:ZtestGit minimac$ git branch 
    feature 
* master 

Mini-de-MiniMac:ZtestGit minimac$ git log --pretty=oneline 
82307080064b764c28622351a4c28abb4f9302b8 Merge branch 'feature' with --no-ff option 
50d9f108d70798a13cc25fb7321d57ad5ba61854 three 
d7163bc5320162689544293be1ac2228c6e3dc34 two 
a7ba4c797d49d940a7d64a8ddaba787eb013622a one 
cc3e4abf5dfad7779de3837a6c4e6e29e3ca87b2 start 
Mini-de-MiniMac:ZtestGit minimac$ git log --pretty=oneline --graph 
* 82307080064b764c28622351a4c28abb4f9302b8 Merge branch 'feature' with --no-ff option 
|\ 
| * 50d9f108d70798a13cc25fb7321d57ad5ba61854 three 
| * d7163bc5320162689544293be1ac2228c6e3dc34 two 
| * a7ba4c797d49d940a7d64a8ddaba787eb013622a one 
|/ 
* cc3e4abf5dfad7779de3837a6c4e6e29e3ca87b2 start 
Mini-de-MiniMac:ZtestGit minimac$ git branch 
    feature 
* master 


Mini-de-MiniMac:ZtestGit minimac$ git branch -d feature 
Deleted branch feature (was 50d9f10). 

Mini-de-MiniMac:ZtestGit minimac$ git branch 
* master 

Mini-de-MiniMac:ZtestGit minimac$ git log --pretty=oneline 
82307080064b764c28622351a4c28abb4f9302b8 Merge branch 'feature' with --no-ff option 
50d9f108d70798a13cc25fb7321d57ad5ba61854 three 
d7163bc5320162689544293be1ac2228c6e3dc34 two 
a7ba4c797d49d940a7d64a8ddaba787eb013622a one 
cc3e4abf5dfad7779de3837a6c4e6e29e3ca87b2 start 

Mini-de-MiniMac:ZtestGit minimac$ git log --pretty=oneline --graph 
* 82307080064b764c28622351a4c28abb4f9302b8 Merge branch 'feature' with --no-ff option 
|\ 
| * 50d9f108d70798a13cc25fb7321d57ad5ba61854 three 
| * d7163bc5320162689544293be1ac2228c6e3dc34 two 
| * a7ba4c797d49d940a7d64a8ddaba787eb013622a one 
|/ 
* cc3e4abf5dfad7779de3837a6c4e6e29e3ca87b2 start 

ありがとうございます。

+0

'git log --graph --decorate --all'は、より鮮明な画像を表示することができます。 –

+1

'git merge --no-ff'は、マージコミットを強制的に作成するため、作成されたコミットの祖先であるため、他のブランチ上にコミットを常に表示します。他のブランチが存在するかどうかは関係ありません。コミットは到達可能であるためそこにあります。 –

+1

最初の親履歴だけが必要な場合は、 '--first-parent'と答えてください。 – jthill

答えて

3

Gitログには、指定したrefの祖先であるすべてのコミットが表示されます。他のブランチの有無は影響しません。それはコミットグラフを歩く。

これらのコミットは、任意のブランチ「に」gitの中

コミットをマスターしていない、機能ブランチにされていないです。ブランチは、コミットに名前を付ける移動可能なポインタです(拡張によって、そのコミットのすべての祖先)。

機能ブランチをマスターにマージすることで、早送りまたはマージのいずれかで、マスターのブランチポインターをそのブランチに新しいコミットに移動します。このコミットには、祖先としてマスターにあった前回のコミットがあります。

git merge --no-ffを実行すると、git log --graphで作業するだけで、git logでは動作しません。

具体的には、マージコミットを作成する際の値は、マージされたもの、いつ、誰によって、誰によって記録されたかを記録することです。 gitリポジトリは履歴のみをコミットグラフのに格納します。ブランチは一時的です。

+1

Gitのコミットは、いくつものブランチの上にあると言いましょう。しかし、哲学的な観点から見ると、それはブランチの数が当然1である場合を除き、特定のブランチにはないということと同じです。とにかく、これは正解です。言葉遣いがちょっとだけです。 :-) – torek

+0

"ブランチは、コミットに名前を付ける移動可能なポインタです" - とてもそうです。ブランチはしばしば '.git/refs/heads /'のプレーンテキストファイルです。ファイルの名前はブランチの名前であり、唯一の内容はそれが指しているコミットの*(つまり単数)チェックサムです。場合によっては '.git/config'のブランチに関連するもう少し多くのデータがありますが、これは単にブランチの説明(あれば)とそれが追跡するように設定されているリモートブランチです。 – 8bittree

関連する問題