Git2

ブランチの切り替え

ブランチを切り替えるには、チェックアウト。
チェックアウトを行うと、まず移動先のブランチ内の最後のコミットの内容がワークツリーに展開されます。
まだコミットしていない変更内容や新しく追加したファイルが、インデックスやワークツリーに残ったままで、他のブランチへのチェックアウトを行うと、その変更内容は元のブランチから、移動先のブランチに対して移動します。
ただし、移動先のブランチで、同じファイルが既に何らかの変更が行われている場合はチェックアウトに失敗します。このような場合は、変更内容を一度コミットするか、またはstashを使って一時的に変更内容を退避させてからチェックアウトしなければない。

現在使用しているブランチの先頭を表す名前です。デフォルトではmasterの先頭を表しています。HEADが移動することで、使用するブランチが変更されます。
・~(チルダ)を後ろに付け加えることで何世代前の親かを指定することができます。
・^(キャレット)は、ブランチのマージで親が複数ある場合に、何番目の親かを指定することができます。

stash

ファイルの変更内容を一時的に記録しておく領域。
stashを使うことで、ワークツリーとインデックス中でまだコミットされていない変更を一時的に退避させることができます。退避させた変更は後から取り出して、元のブランチや別のブランチに反映させることができます。

ブランチの統合

リモート追跡ブランチの中で統合する。
作業が完了したトピックブランチは、最終的に統合ブランチに統合されます。
ブランチの統合には2種類があり、どちらを使うかで統合後のブランチの履歴が大きく異なる。

①merge

複数の履歴の流れを合流させることができます。
マージは統合ブランチにチェックアウトしている状態で、トピックブランチをマージするという手順で行う。
トピックブランチが統合ブランチから分岐した状態から統合ブランチが編集されていなければ普通にマージされるだけで完了する。これをfast-forward(早送り)マージという。
もし、統合ブランチが編集されていれば、両方の変更を取り込んだマージコミットが作成され、統合ブランチの先頭はそのコミットに移動します。

オプションによりfast-forwardマージが可能な場合でも新しくマージコミットを作成して合流させることもできる。

②rebase

リベース元の履歴がリベース先のブランチの後ろに追加される形で一本化される。

コマンド

ブランチを作成する

$ git branch <branchname>

引数を指定せずにbranchコマンドを実行すると、ブランチの一覧を表示することができる。

ブランチを切り替える

$ git checkout <branch>

-b オプションを指定して実行すると、ブランチの作成とチェックアウトをまとめて行うことができます。
例)$ git checkout -b <branch>

難しかったこと

リモート追跡ブランチについての記事を読み、迷路にはまってしまった!
Git で「追跡ブランチ」って言うのやめましょう - Qiita

自分なりに色々読み下記の様な理解でいいのかな?と思うが、次回もう少し手を動かし、理解を深めていきたいと思う。
Git add.png
ローカルリポジトリのmasterと書いてあるものはインデックス(ステージ)のことの様。
これはgit addした内容の中の一部だけをコミットするなどの使い方も出来るようで、そのためにもこのmaster(今はmainと呼ぶ)が必要なのかなと思った。
commitしたものはgit logで履歴を追えるが、git addしたものは履歴を保存しないただの一時的な置き場なのかなと理解した。

分かりやすかった記事

【Git】fetch, merge, pullの基本的な使い方 | Points & Lines
Git 2.27 での git pull 時の warning について - Qiita
Gitブランチについての基本まとめ - Qiita