入門Git 第4章

❏ステージされた変更

作業ツリーにおける変更のうち、その変更についてリポジトリに伝えたいもののこと

  • 変更をステージすると、Gitのindexが更新される
  • Gitのindexはステージングエリアと呼ばれることも多い

❏ステージングエリア

リポジトリに対してコミットする前に調整できる場所のこと

git add -i

  • 対話モードで色々できる

git add -p

hunk単位での追加するか否かを対話モードで選択できる

❏hunk

ファイル内の変更のこと

commitの仕方はひとつではない。

❏具体例

  • git add some-file git commit -m “changes to some-file"
    • ファイルの一部だけをコミットしたいときに便利
  • git commit -m “changes to some-file” -a
    • 変更を一気にまとめてコミットしたいときに便利
  • git commit -m “changes to some-file” some-file
    • 変更された複数ファイルのうち、1つ選択してコミットしたいとき便利

差分をみる

  • Gitでは、作業ツリーにあるもの、ステージングエリアにあるもの、リポジトリにあるものについてお互いの差分を表示できる

  • git diff

    • ステージングエリアと作業ツリー間の差分を表示
  • git diff —cached
  • git diff HEAD

    • ステージングエリアを含めた、作業ツリー上すべてとリポジトリ間の差分を表示
  • HEADはキーワード

ファイルの管理

  • git mv <元ファイル> <新ファイル>
    • ファイル名変更やファイルの移動だけでなく、新しいファイルに対するgit add, 古いファイルに対するgit rm(リポジトリからファイル削除)も実行してくれてる

入門Git 第3章

  • リポジトリに格納される一つ一つの履歴がコミット
  • 個々のコミットがコードの進捗の目印になる

  • コミット名はSHA-1 ハッシュ値を用いて個々のコミットをユニーク識別する

    • 分散型では同時に同じファイルを編集する二人がこれはhogehogeコミットであると決めれない
    • これを解決するためにSHA-1ハッシュ値を使用する
    • SHA(Secure Hash Algorithm): 何らかのデータから衝突する確率が小さい文字列を生成するアルゴリズムで、NSA(米国国家安全保障局)が開発した
    • Gitがコミット名生成に使うのは、リポジトリメタデータの一部、コミットした人の個人情報、タイムスタンプである
    • 2**63回(9223372036854775808回)ハッシュ値を生成してはじめて衝突する可能性がある。
  • ステージするとその変更はコミットの準備が整えられたことになる

  • Gitにはプロジェクトコードが保持される場所が3つある

    • 直接作業している作業ツリー
    • ステージングエリア(インデックス)
    • リポジトリ
  • コミットログには最低限「なぜ」を含める

  • git branch 作りたいブランチ名 分岐元ブランチ名

  • git commit -a

    • Gitが変更された作業ツリーのファイルをすべてコミットする
  • rebase

    • ブランチから変更を取り出してきて、それを別のブランチの先頭で再生すること

疑問

  • git checkout branch_name, git checkout file_nameがごっちゃ。ひとつの統合されたcheckoutって概念があるのか?