Git3
コマンド
ブランチをマージする
$ git merge <統合したいブランチ名>
指定したブランチがHEADの指しているブランチに取り込まれる。
ブランチを削除する
$ git branch -d <ブランチ名>
branchコマンドに -d オプションを指定して実行。
並行で作業する
Issue2とissue3それぞれ編集したが、ブランチを切り替えるとファイルの内容が変わっていて、1つのブランチごとにそれに対応したインデックスとワークツリーがあるんだという事が分かった。
Git logの出力結果に括弧書きで出てくるものは、各ブランチの最新の状態を表している様だった。
例えば、(HEAD -> issue3)の記載のあるコミットが、issue3の今の状態で、(main)の記載のあるcommitが今のmainの状態。

rebaseでマージする
$ git rebase <つなぐ元にするブランチ名>
例)$ git rebase main
競合箇所を修正した後はコミットではなく、rebaseコマンドに --continue
オプションを指定して実行。もし、rebase自体を取り消す場合は--abort
オプションを指定。$ git add myfile.txt
$ git rebase --continue
この結果、logは下記の状態になった。
rebaseではHEADのあるブランチ(issue3)に指定したブランチの内容(青枠のcommit内容)が入り、一本にまとまっただけで、下記の様な状態らしい。

ので、HEADをmainに移し、iuuse3の内容をmergeする必要がある。
$ git checkout main
し、$ git merge issue3
した結果mainの中にissue3の内容が取り込まれ、さらにHEADもそちらに移った。
トリポジトリに関係するコマンド
リモーPull
git fetch を行った上で git merge を行う。
デフォルトの設定では、 rebase せずに fast-forward 可能な場合は fast-forward を行い、そうでない場合は、 merge commit を生成しようとします。
この時、競合する変更がなければ自動的にマージコミットが作られ、競合があった場合は、それを解決してから自分でコミットする必要がある。
fetch
単にリモートリポジトリの内容を確認したいだけの時はマージをしたくない場合もあります。そのような時はfetchを使用します。
fetchを実行すると、リモートリポジトリの最新の履歴の取得だけを行うことができます。取得したコミットは、名前の無いブランチとして取り込まれます。このブランチはFETCH_HEADという名前でチェックアウトすることができます。
push
ローカルリポジトリからリモートリポジトリにpushするときは、pushしたブランチがfast-forwardマージされるようにしておく必要があります。もし、競合が発生するような場合は、pushが拒否されます。
タグ
軽量タグ
ローカルで一時的に使う使い捨てに使用。
・名前を付けられる
$ git tag <タグの名前>
現在のHEADが指しているコミットにタグを付ける。
パラメーター無しでgit tag
を実行すると、タグの一覧を表示できます。
logコマンドに --decorate
オプションを付けて実行すると、タグ情報を含めて履歴を表示することができます。
注釈付きタグ
リリースタグに使う。
・名前を付けられる
・コメントを付けられる
・署名を付けられる
$ git tag -am “<コメント>” <タグの名前>
-a
オプション 注釈付きタグを追加-m
オプション コメントを与える
タグを削除する
-d
オプション<タグの名前>で削除できる。
コミットの書き換え
直前のコミットを修正
amendオプションを指定してコミットを行うと、同じブランチの直前のコミットに対して内容を追加やコメントの修正をすることができます。
ファイルの内容を変更し、git addする
$ git commit --amend
すると、直前のコミットのコミットメッセージがエディタで表示されるので、これを変更する。
過去のコミットを打ち消す
revertでは、指定したコミットの内容を打ち消すコミットを作り出すことができる。
公開済みのcommitは削除出来ないので、revertで内容を打ち消すコミットを作り出す。
$ git revert <打ち消したいコミット>
例)$ git revert HEAD
コミットメッセージ編集画面になったら、Escキーを押してから「ZZ」と入力することで確定される。
コミットを捨てる
resetでは、要らなくなったコミットを捨てることができます。
マージにも使える。
$ git reset --hard HEAD~
オプション
--soft:HEADの位置のみ(commitやmergeする前の状態に戻るだけ)
--mixed:HEADの位置・ステージ
--hard:HEADの位置・ステージ・作業ディレクトリ
1つ前のコミット・・・HEAD^
2つ前のコミット・・・HEAD^^
8個前・・・HEAD~8
やコミットIDでの指定も出来る。
コミットを抜き取る
cherry-pickは、別のブランチから今いるブランチへ、必要なコミットだけをコピーできる便利なコマンド。
$ git cherry-pick [コミットIDその1]..[コミットIDその2]
コミットせずに作業ディレクトリだけに変更を留めたい場合は、オプション-n
を使います。