2016-09-21 8 views
3

Gitでコミットするとリポジトリ全体のスナップショットが作成され、必要なときにその状態に戻ることができます。ですから、私にはコミットは変化ではなく、リポジトリの状態を表します。あなたは古い状態に戻ってみたいと思うときにgit checkout commit-hashGitのコミットはリポジトリの状態を表していますか?

を実行したときに何が起こるのか分かりません。なぜなら、そのコミットによって行われた変更だけが得られるからです。

コミットが全体のリポジトリの状態を表す場合、cherry-pick中に2つのコミットの違いを得る方法はありますか?

答えて

6

あなたの理解は正しいです: "コミット"は変更(デルタ)ではありませんが、状態全体を表します。しかし、コミットには単なる状態以上のものが含まれています。親コミット(通常は1つですが、任意の数にすることができます)へのポインタもあります。つまり、リポジトリの履歴にある前回のコミットです。

親ポインタを使うと、gitは現在のコミットとその親の違いを把握できます。これはcherry-pickが行うことです:diffを計算し、その差分だけを現在の状態に適用します。

関連する問題