VCS
Issue Date: 2024-11-04 システム開発プロジェクト応用第一 第5,6回 Gitによるバージョン管理, 内田公太, 2020.01 Comment
VCSの歴史から原理、実用的な使い方まで、Gitについて体系的にまとまっている。普段何気なく使っているが、改めて勉強すると、なるほど、と思うことが多い。
- VCSの歴史、モチベーション(複数並列するバージョンを適切に管理したい)
- ワークツリー、インデックス、リポジトリ(HEAD)の違い
- 基本的なgitコマンドから、普段あまり使わないハンク(hunk)の選択的なaddなどのコマンド
- コミットオブジェクト(ワークツリーのスナップショットを保持したもの≠前回のコミットに対する差分)
- HEAD/Detached HEADの原理
- Gitタグ
- checkoutの原理(ワークツリーとインデックスをHEADの内容に更新する)
- ブランチ、ブランチとHEADの関係性
- マージ方式(2way マージ、3wayマージ)
- 2wayマージは元ファイルを参照しないのでマージ時に特定の編集がなかったことになってしまう)
- 3wayマージは元ファイルも見て差分を計算するのでこのようなことが起こらない
- 競合の原理、競合解決時のファイル内容
- Fast-Forwardマージ(ポインタを動かすだけで事足りる場合に利用)
- cherry pick(任意のコミットをとってくる)
- (cherry pickを連続して利用する)リベース(ベースを付け替える操作)
- 歴史を修正する
- git reflogで起点とするコミットIDを見つけ、git rebase -iでコミット順変更orメッセージ変更、git commit --amendでコミット修正
- 状態のリセット
- soft: HEADを指定したコミットにリセット
- mixed: インデックスをリセット
- hard: インデックスとワークツリーをリセット
- git stash
- コミット粒度とメッセージ
- 単一の関心事項のみを含むような粒度でコミットしよう(一言で説明できる粒度)
- cherry pickが容易になる
- 別ブランチの脆弱性への対応のみを適用したい、など
- 現在形で書く。そうすると、後からcherry pickするときに内容の判断をしやすい。
神講義