【Git】CUIによるGit運用デビュー向けお役立ちコマンドのまとめ

# はじめに

主に以下の様な方向けにCUIでの基礎的なGitコマンド例を紹介する。
後半ではTips的なコマンドも紹介する。

<pre>
・GitはGUIクライアント(SourceTree等)を使っておりコマンドでの操作はよくわからない。
・最近Gitを使い始めたので基礎的なコマンドが知りたい。
</pre>

*Gitに関して詳細な説明はしないが取り敢えず一通り基礎操作出来る事を目指す。*

# 前準備

### CUIクライアント

Macの場合は最初からGitがインストールされている。

WindowsならばGitクライアントの用意が必要。
特にこだわりが無ければ[Git BASH](https://gitforwindows.org/)でOK。

###config設定

####名前、Eメールアドレスを設定

以下はglobalに設定している（どのリポジトリ操作でも有効）

*nameは空白スペースを入れると前半しか登録されないので""等で囲う必要が有る*


```bash
% git config --global user.name "golobal onamae"
% git config --global user.email global@example.com
```
####名前、Eメールアドレスをリポジトリ別に使い分けたい場合

仕事用、プライベート用など使い分けたい場合は以下の様にローカル設定する。
当該リポジトリではローカルの方が優先される。

```bash
% cd target_repo
% git config --local user.name "local onamae"
% git config --local user.email local@example.com
```

####現在の設定を確認する

意図通りの設定になっているか当該リポジトリに移動して以下コマンドで確認。

```bash
% git config --list
```

#基礎編１

###リポジトリをローカルに準備

```bash
% git clone git@github.com:example/example.git
```

###ブランチ状態確認

様々な情報を確認する。
何らかの操作をする場合は事前に`nothing to commit, working tree clean`と出力されるのを毎回確認する事推奨。

```bash
% git status
```

###ブランチ関連

####ブランチ一覧確認

ローカルのブランチ一覧が確認出来る。

```bash
% git branch
```

####ブランチ作成＆移動

現在のブランチを元に新規ブランチを作成し移動する。

```bash
% git checkout -b new_branch
```

###commit概要

変更したファイルのindex登録→indexされた情報をcommitという２つの操作が必要となる。

####特定ファイルをindex登録する

```bash
% git add example.txt
```
####カレントディレクトリ配下の変更ファイル全てをindex登録する

```bash
% git add .
```

####メッセージ指定有りでcommit

```bash
% git commit -m "example messeage"
```

####メッセージはエディタで入力しつつcommit

紐付いたエディタ(Vim等)が起動するのでメッセージを入力して保存するとcommit完了する。

```bash
% git commit -a
```

###push概要

commitした情報をリモートリポジトリに反映する操作。

####初回push

新規ブランチの初回push時にリモートリポジトリへのupstream設定をする。

```bash
% git push --set-upstream origin new_branch
```

####push

上記コマンドでupstream設定完了後はシンプルにpushのみでOK。

```bash
% git push
```

###ブランチを移動する

####checkout

複数のブランチが存在する場合、目的のブランチに切り替えて確認や作業を行う、

```bash
% git checkout new_branch
```

###commit履歴確認

qキーで履歴画面から離脱出来る。

```bash
% git log
```

他メンバーと共同作業しない場合はここまでで最低限の基本は完了。

#基礎編２

###他メンバーの変更をローカルに取り込む様な場合に必要なコマンド

###fetch概要

他人が変更した情報等をローカルリポジトリに取り込む操作。

####fetch

リモートリポジトリのブランチの新規追加や変更が有った場合、該当ブランチが表示されローカルリポジトリに取り込まれる。

```bash
% git fetch
```

####ローカルリポジトリの内容を作業ディレクトリにチェックアウトする

例えばfetchでother_branchというブランチが新規追加が確認出来た場合、ローカルの作業ディレクトリで確認やcommitを行う為にチェックアウトする。

```bash
% git checkout -b other_branch origin/other_branch
```

####pull

上記の様に作業ディレクトリへのcheckout実施後は当該ブランチの変更内容はpullのみでリモートリポジトリから取り込み可能となる。

```bash
% git pull
```

###merge概要

ブランチ同士を結合して変更内容を現在のブランチに取り込む事。

####merge

現在checkoutしているブランチに指定のブランチ(other_branch)をmergeする

```bash
% git merge other_branch
```

#基礎編3

###不必要になったブランチの後始末など

####ブランチ削除（ローカル）

ローカルリポジトリからブランチが削除される。

*削除対象のブランチ以外から操作する必要有り*

```bash
% git branch -d target_branch
```
####ブランチ削除（リモート）

リモートリポジトリからブランチが削除される。

```bash
% git push --delete origin target_branch
```

基礎編終わり。
続きはTips的なコマンドを紹介していく。

#便利コマンドTips

###stash

####作業ディレクトリの変更を一時退避したい

変更分が退避される。

```bash
% git stash save "stash_message"
```

もしindex前の新規ファイルがあれば退避されないので以下の様にオプション追加する。

```bash
% git stash save -u "stash_message"
```

####作業ディレクトリに退避内容を戻す

最後に退避した内容が復帰される。

```bash
% git stash pop
```

####退避内容の一覧を確認

```bash
% git stash list
```

####退避内容を全て消去する

```bash
% git stash clear
```

###commit内容を修正したい

**基本的にcommit内容がリモートリポジトリに未pushの状態を前提にしています。
push後に操作すると不整合が起きる可能性があるのでお勧めしません。**

####直前のcommit内容やメッセージを修正したい

```bash
% git commit --amend
```

####直前のcommitを取り消す（作業ディレクトリとindexは取り消さない）

```bash
% git reset --soft HEAD^
```

####直前のcommitを取り消す（作業ディレクトリのみ取り消さない）

```bash
% git reset HEAD^
```

####直前のcommitを取り消す（作業ディレクトリも含め全て取り消す）

```bash
% git reset --hard HEAD^
```

###ファイル操作

####ファイル名変更

```bash
% git mv orig_name new_name
```

####ファイル移動

```bash
% git mv target_file target_dir
```

####ファイル削除

```bash
% git rm target_file
```

###複数のcommit内容をまとめてmerge

マージ元ブランチ(target_branch)に差分commitが複数有っても一つのcommitにまとまってmergeされる。

*目的は関連のあるcommitをまとめて履歴を確認しやすくしたり等*

```bash
% git merge --squash target_branch
```

###pushした内容を切り戻したい

前提条件として上記のsquashか以下の--no-ffオプションを利用している事。

```bash
% git merge --no-ff target_branch
% git push
```

commit内容を打ち消して再度pushすると切り戻しとなる。
[コミットハッシュ値]は`git log`で確認可能。
打ち消したいcommit対象(最新を想定)のコミットハッシュ値を指定する。

```bash
% git revert -m 1 [対象コミットハッシュ値]
% git push
```

###切り戻した内容を再度有効にしたい

`git revert`で切り戻した時の[コミットハッシュ値]を指定して実行する。
打ち消しの打ち消し=復活という事で再度commit内容が復帰となる。

```bash
% git revert [revertのコミットハッシュ値]
% git push
```
###リモートリポジトリのブランチ一覧最新情報をローカルに反映

`git branch -a`等で消去したはずのリモートリポジトリのブランチが表示されたりする事がある。
これを最新情報に更新する。

```bash
% git remote update -p
```

以上です。