よく使うGitコマンド

# はじめに
仕事でGitを使うことがありますが、毎度忘れてしまうのでメモ。



# クローン(git clone)
| コマンド | 説明 |
|:---------|:-----|
|git clone {リポジトリのURL} | 対象リポジトリのデフォルトブランチをクローンする |
|git clone -b {ブランチ名} {リポジトリのURL} |対象リポジトリの対象ブランチをクローンする |


# ブランチ操作（git branch）
| コマンド | 説明 |
|:---------|:-----|
|git branch |ローカルブランチの一覧を出力する（チェックアウト中のブランチに * が付く） |
|git branch {ブランチ名} |対象ブランチを新規作成する（チェックアウトはしない） |
|git branch -d {ブランチ名} |対象ブランチを削除する |
|git branch -m {旧ブランチ名} {新ブランチ名} |対象ブランチをリネームする |


# ブランチの切り替え、変更の取り消し（git checkout）
| コマンド | 説明 |
|:---------|:-----|
|git checkout {ブランチ名} |対象ブランチに切り替える |
|git checkout -b {ブランチ名} |対象ブランチを新規作成し、切り替える |
|git checkout {ファイル名} |add前の変更を取り消す：特定のファイルの変更を取り消す |
|git checkout {ディレクトリ名} |add前の変更を取り消す：特定のディレクトリ以下の変更を再起的に取り消す |
|git checkout . |add前の変更を取り消す：全てを元に戻す |


# 最新情報をローカルに反映（git pull）
| コマンド | 説明 |
|:---------|:-----|
|git pull |リモートリポジトリから最新の状態をローカルリポジトリに反映する |

`git fetch`と`git merge`の動作を合わせて行うコマンドが`git pull`
`git fetch`：`git pull`と同じくリモートリポジトリから最新の状態をローカルに反映するコマンド。反映先がアップストリームブランチ。
`git merge`：アップストリームブランチからローカルブランチを更新するコマンド


# ブランチ作成
| No. | コマンド | 説明 |
|:-----|:---------|:-----|
|1 |git clone -b develop {リポジトリのURL} |developをコピー |
|2 |cd {パス} |コピーしたブランチに移動 |
|3 |git branch |現在のブランチを確認 |
|4 |git pull |ブランチの最新化 |
|5 |git branch {新しいブランチ名} |コピーしたブランチを新しいブランチ名で複製 |
|6 |git checkout {新しいブランチ名} |複製した新しいブランチをチェックアウト 

No.5,6のブランチ作成-チェックアウトをまとめて実行する場合。
`git checkout -b {新しいブランチ名}`
新ブランチにpushしてはじめて他者からも確認できるようになる。
初めてのpush時は`git push`だけでは通らず、エラーが出るが、表示されるヒントに沿ってコマンドを実行すればOK。

# ブランチにpushする
| No. | コマンド | 説明 |
|:-----|:---------|:-----|
|1 |git add -n . |インデックスに追加されるファイル名を一覧表示する |
|2 |git add . |全てのファイルをインデックスに追加する |
|3 |git commit ./ |コミットする<br>コミットコメント入力用エディタが表示される<br>表示されるエディタでコメントを一番上の行に入力していく<br>以下はエディタの操作方法 |
|4 |i |入力モード開始<br>エディタに入力できるようになる |
|5 |{コミットコメント入力} |コミットコメントを入力する |
|6 |Escキー |入力モード終了 |
|7 |:wq<br>Enterキー |メッセージの保存＆コミット実行 |
|8 |git log |コミットログの確認<br>入力したコミットコメントを確認する<br>終了するときはq |
|9 |git push |コミットをpushする |


# developにマージする
| 手順 | コマンド | 説明 |
|:-----|:---------|:-----|
|1 |git checkout develop |developに切り替える |
|2 |git branch |現在のブランチ確認(developになっていること) |
|3 |git pull |developを最新化 |
|4 |git merge {マージしたいブランチ名} |developに対象ブランチをマージする |
|5 |git push |マージしたブランチをpushする |

必ずdevelopを最新化してからマージすること。
めんどくさいことになる。

# gitでタグをチェックアウトする 
| コマンド | 説明 |
|:---------|:-----|
|git tag |tagの一覧を確認<br>checkoutしたいtag名を確認する |
|git checkout refs/tags/{タグ名} |特定のtagをcheckoutする |
|git checkout -b {ブランチ名} refs/tags/{タグ名} |ブランチを作成してタグをcheckoutする |

タグ（tag）を使うことでその時点のバージョンを利用したり元に戻したりなどができるようになる。
試験時のソースのバージョン管理をする方法として tag の活用ができる。
参考：https://h2ham.net/git-tag-checkout/

# コメントの修正(push済の場合)
| 手順 | コマンド | 説明 |
|:-----|:---------|:-----|
|1 |git rebase -i HEAD~5 |修正したいコミットを指定する<br>左記は5個前のコミットを指定<br>編集画面が表示される |
|2 |コメント修正 |pick c41badb 修正コメント1<br>等表示されるので修正したいコメントのpickをeに編集する<br>iで入力モードに切り替え、eに編集する  |
|3 |:wq<br>Enterキー |保存して終了 |
|4 |git commit --amend |コミットコメントの修正<br>エディットが表示されたらコメントを修正する<br>i：入力モード、コメント修正、:wq+Enter：保存して終了 |
|5 |git rebase --continue |コメント修正モード終了 |
|6 |git push -f origin master |強制push |

参考：https://saikeblog.com/2019/04/20/%E9%81%8E%E5%8E%BB%E3%81%AB%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88%E3%81%B8push%E3%81%97%E3%81%9F%E3%82%B3%E3%83%9F%E3%83%83%E3%83%88%E3%81%AE%E3%82%B3%E3%83%A1%E3%83%B3%E3%83%88%E3%82%92%E5%A4%89/