2017-12-19 6 views
1

Gitのアルゴリズムは分かりにくく、私はこれが何をしているかを知りたいと思っています。それぞれのブランチのHEADで構築されるようにリポジトリのファイルに正確な違いがあるのでしょうか?言い換えれば、私はそれがの「スナップショット」を意味することを修正アムさんは、私が"git diff branch1 branch2"はブランチ間の "絶対差"を表していますか?

git diff branch1 branch2

を実行し、それが示して唯一の事はFoo.csのライン56は

+ var x = bar; 
- var y = bar; 

であるということであるとしましょうHEADのリポジトリはbranch1branch2の2行以外はまったく同じですか?あるいは、diffアルゴリズムは、最も近い共通コミットを使用して何かをして、実際に違いがないという違いを見ることができますか?

+0

はい、あなたの考えは正しいと思われます。 –

+0

あなたが見ているところでは正しいですが、あなたの専門用語(または少なくとも構文)はGitのものと完全に一致しません。すべての大文字の 'HEAD'や' @ 'は特別な名前です* current *ブランチ、小文字の 'head'という単語(一般的には普通のフォント:-)で表現されます)は、「ブランチヘッド」または「ブランチのチップコミット」を参照します。 'branch1'のようなブランチ* name *は、Git *リファレンス*ブランチのチップコミットのハッシュIDを含む' refs/heads/branch1'の略です。 'git checkout branch1'を実行して* new * commitを実行すると、Gitはそれを次のコメントで処理します。 – torek

+0

... Gitは、新しいコミットをリポジトリに書き込んで、プロセス内で新しいハッシュIDを取得し、その新しいハッシュIDを 'refs/heads/branch1'エントリに詰め込み、' branch1'という名前がその新しいコミットを参照するようにします。コミットの*親*ハッシュIDは、新しいコミットを行う前のヒントであったものです。これはGitのブランチの成長方法です。 – torek

答えて

1

あなたは

+ var x = bar; 
- var y = bar; 

を見るとこれはbranch1は、最初の行が含まれており、branch2 2行目が含まれていることを意味します。 branch1branch2の間のそのような相違点はすべて表示されます。いずれの行も表示されていない場合は、同じ行であると見なすことができます。

関連する問題