忘れがちなGitコマンド

種別|操作|コマンド
---|---|---
[ローカルリポジトリセットアップ](https://qiita.com/m_aki/items/3e0fbc0cf75eca96128b#-%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA-%E3%82%BB%E3%83%83%E3%83%88%E3%82%A2%E3%83%83%E3%83%97)|[リモートリポジトリコピー](https://qiita.com/m_aki/items/3e0fbc0cf75eca96128b#git-clone--%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA%E3%82%B3%E3%83%94%E3%83%BC)|git clone
[リポジトリ構成](https://qiita.com/m_aki/items/3e0fbc0cf75eca96128b#-%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA%E6%A7%8B%E6%88%90)|[－](https://qiita.com/m_aki/items/3e0fbc0cf75eca96128b#-%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA%E6%A7%8B%E6%88%90)|－
[リモートリポジトリ操作](https://qiita.com/m_aki/items/3e0fbc0cf75eca96128b#-%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA%E6%93%8D%E4%BD%9C)|[リモート一覧表示](https://qiita.com/m_aki/items/3e0fbc0cf75eca96128b#remote--v--%E4%B8%80%E8%A6%A7%E8%A1%A8%E7%A4%BA)|git remote -v
 |[リモート最新履歴取得](https://qiita.com/m_aki/items/3e0fbc0cf75eca96128b#fetch--%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA%E6%9C%80%E6%96%B0%E5%B1%A5%E6%AD%B4%E5%8F%96%E5%BE%97)|git fetch [remote name] [branch name]
 |[リモート変更取り込み](https://qiita.com/m_aki/items/3e0fbc0cf75eca96128b#pull--%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA%E5%A4%89%E6%9B%B4%E5%8F%96%E3%82%8A%E8%BE%BC%E3%81%BF)|git pull [remote name] [branch name]
 |[リモートへ反映](https://qiita.com/m_aki/items/3e0fbc0cf75eca96128b#push--%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81%E5%8F%8D%E6%98%A0)|git push [remote name] [branch name]
[ブランチ操作](https://qiita.com/m_aki/items/3e0fbc0cf75eca96128b#-%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81%E6%93%8D%E4%BD%9C)|[ローカルブランチ一覧表示](https://qiita.com/m_aki/items/3e0fbc0cf75eca96128b#branch--%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81%E4%B8%80%E8%A6%A7%E8%A1%A8%E7%A4%BA)|git branch
 |[リモートブランチ一覧表示](https://qiita.com/m_aki/items/3e0fbc0cf75eca96128b#branch--%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81%E4%B8%80%E8%A6%A7%E8%A1%A8%E7%A4%BA)|git branch -r
 |[新規リモートブラント取込み](https://qiita.com/m_aki/items/3e0fbc0cf75eca96128b#fetchbranch--%E6%96%B0%E8%A6%8F%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81%E5%8F%96%E3%82%8A%E8%BE%BC%E3%81%BF)|git fetch origin [remote branch name]<br>git checkout [remote branch name]
 |[ローカルブランチ作成](https://qiita.com/m_aki/items/3e0fbc0cf75eca96128b#branch--%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81%E4%BD%9C%E6%88%90)|git branch [new branch name] [base branch name] or [commit id]
 |[ローカルブランチ作成＆移動](https://qiita.com/m_aki/items/3e0fbc0cf75eca96128b#checkout--b--%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81%E4%BD%9C%E6%88%90%E7%A7%BB%E5%8B%95)|git checkout -b [new branch name] [base branch name] or [commit id]
 |[ローカルブランチ作成＆移動<br>(リモートブランチベース)](https://qiita.com/m_aki/items/3e0fbc0cf75eca96128b#fetchcheckout---%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81%E4%BD%9C%E6%88%90%E7%A7%BB%E5%8B%95%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81%E3%83%99%E3%83%BC%E3%82%B9)|git fetch origin [remote branch name]<br>git checkout -b [local branch name] [origin/remote branch name]
 |[ローカルブランチ切り替え](https://qiita.com/m_aki/items/3e0fbc0cf75eca96128b#checkout---%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81%E5%88%87%E3%82%8A%E6%9B%BF%E3%81%88)|git checkout [branch name]
 |[リモートへブランチ反映](https://qiita.com/m_aki/items/3e0fbc0cf75eca96128b#push--%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81%E4%BD%9C%E6%88%90)|git push [remote name] [branch name]
 |[ブランチマージ<br>(マージ側ブランチログ付き)](https://qiita.com/m_aki/items/3e0fbc0cf75eca96128b#merge--%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81%E7%B5%B1%E5%90%88)|git checkout [base branch name]<br>git merge [merge branch name] or [commit id]
 |[ブランチマージ<br>(マージ履歴＆マージ側ブランチログ付き)](https://qiita.com/m_aki/items/3e0fbc0cf75eca96128b#merge--%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81%E7%B5%B1%E5%90%88)|git checkout [base branch name]<br>git merge --no-ff [merge branch name] or [commit id]
 |[ブランチマージ<br>(ログなし＆未commit)](https://qiita.com/m_aki/items/3e0fbc0cf75eca96128b#merge--%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81%E7%B5%B1%E5%90%88)|git checkout [base branch name]<br>git merge --squash [merge branch name] or [commit id]
 |[任意のコミット取り込み](https://qiita.com/m_aki/items/3e0fbc0cf75eca96128b#cherry-pick--%E4%BB%BB%E6%84%8F%E3%81%AE%E3%82%B3%E3%83%9F%E3%83%83%E3%83%88%E3%81%AE%E5%8F%96%E3%82%8A%E8%BE%BC%E3%81%BF)|git cherry-pick [commit id]
 |[任意のコミット取り込み<br>(コメント修正)](https://qiita.com/m_aki/items/3e0fbc0cf75eca96128b#cherry-pick--%E4%BB%BB%E6%84%8F%E3%81%AE%E3%82%B3%E3%83%9F%E3%83%83%E3%83%88%E3%81%AE%E5%8F%96%E3%82%8A%E8%BE%BC%E3%81%BF)|git cherry-pick -e [commit id]
 |[任意のコミット取り込み<br>(commitスキップ)](https://qiita.com/m_aki/items/3e0fbc0cf75eca96128b#cherry-pick--%E4%BB%BB%E6%84%8F%E3%81%AE%E3%82%B3%E3%83%9F%E3%83%83%E3%83%88%E3%81%AE%E5%8F%96%E3%82%8A%E8%BE%BC%E3%81%BF)|git cherry-pick -n [commit id]
 |[任意のコミット取り込み<br>(範囲指定)](https://qiita.com/m_aki/items/3e0fbc0cf75eca96128b#cherry-pick--%E4%BB%BB%E6%84%8F%E3%81%AE%E3%82%B3%E3%83%9F%E3%83%83%E3%83%88%E3%81%AE%E5%8F%96%E3%82%8A%E8%BE%BC%E3%81%BF)|git cherry-pick [commit id]^..[commit id]
[ファイル操作](https://qiita.com/m_aki/items/3e0fbc0cf75eca96128b#-%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E6%93%8D%E4%BD%9C)|[インデックスへ反映](https://qiita.com/m_aki/items/3e0fbc0cf75eca96128b#add--%E3%82%A4%E3%83%B3%E3%83%87%E3%83%83%E3%82%AF%E3%82%B9%E3%81%B8%E5%8F%8D%E6%98%A0)|git add [file name1] [file name2]
 |[ローカルリポジトリへ反映](https://qiita.com/m_aki/items/3e0fbc0cf75eca96128b#commit--%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA%E3%81%B8%E5%8F%8D%E6%98%A0)|git commit -m "commit message"
 |[リモートリポジトリへ反映](https://qiita.com/m_aki/items/3e0fbc0cf75eca96128b#push--%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA%E3%81%B8%E5%8F%8D%E6%98%A0)|git push [remote name] [branch name]
 |[リモートの状態に戻す](https://qiita.com/m_aki/items/3e0fbc0cf75eca96128b#reset---hard--%E3%83%AF%E3%83%BC%E3%82%AD%E3%83%B3%E3%82%B0%E3%83%84%E3%83%AA%E3%83%BC%E3%82%A4%E3%83%B3%E3%83%87%E3%83%83%E3%82%AF%E3%82%B9%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA%E3%82%92%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88%E3%81%AE%E7%8A%B6%E6%85%8B%E3%81%AB%E6%88%BB%E3%81%99)|git reset --hard [remote name]/[branch name]
[状態確認](https://qiita.com/m_aki/items/3e0fbc0cf75eca96128b#-%E7%8A%B6%E6%85%8B%E7%A2%BA%E8%AA%8D)|[ステータス確認](https://qiita.com/m_aki/items/3e0fbc0cf75eca96128b#status--git%E3%82%B9%E3%83%86%E3%83%BC%E3%82%BF%E3%82%B9%E7%A2%BA%E8%AA%8D)|git status
[差分確認](https://qiita.com/m_aki/items/3e0fbc0cf75eca96128b#-%E5%B7%AE%E5%88%86%E7%A2%BA%E8%AA%8D)|[ローカルリポジトリとの差分表示](https://qiita.com/m_aki/items/3e0fbc0cf75eca96128b#diff-head--%E3%83%AF%E3%83%BC%E3%82%AF%E3%83%84%E3%83%AA%E3%83%BC%E3%81%A8%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AAhead%E3%81%AE%E5%B7%AE%E5%88%86%E8%A1%A8%E7%A4%BA)|git diff HEAD [file name(option)]
 |[コミットIDで差分表示](https://qiita.com/m_aki/items/3e0fbc0cf75eca96128b#diff--%E3%82%B3%E3%83%9F%E3%83%83%E3%83%88id%E3%81%A7%E5%B7%AE%E5%88%86%E8%A1%A8%E7%A4%BA)|git diff [commit id] [commit id] [file name(option)]
[コミット履歴操作](https://qiita.com/m_aki/items/3e0fbc0cf75eca96128b#-%E3%82%B3%E3%83%9F%E3%83%83%E3%83%88%E5%B1%A5%E6%AD%B4%E6%93%8D%E4%BD%9C)|[コミット状況確認](https://qiita.com/m_aki/items/3e0fbc0cf75eca96128b#log--%E3%82%B3%E3%83%9F%E3%83%83%E3%83%88%E7%8A%B6%E6%B3%81%E7%A2%BA%E8%AA%8D)|git log --oneline --graph --numstat --name-only --decorate --num-status
[タグ操作](https://qiita.com/m_aki/items/3e0fbc0cf75eca96128b#-%E3%82%BF%E3%82%B0%E6%93%8D%E4%BD%9C)|[タグ作成](https://qiita.com/m_aki/items/3e0fbc0cf75eca96128b#tag--%E3%82%BF%E3%82%B0%E4%BD%9C%E6%88%90)|git tag [tag name]
 |[リモートへの反映](https://qiita.com/m_aki/items/3e0fbc0cf75eca96128b#push---tags--%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88%E3%81%B8%E5%8F%8D%E6%98%A0)|git push --tags

# ■ Git設定

## 設定単位

|管理オプション|管理単位|格納ディレクトリ|
|---|---|---|
|--system|システム|/etc/gitconfig|
|--global|ユーザ|~/.gitconfig|
|不要|リポジトリ|.git/config|


## config -l : 設定確認

~~~sh:全体
$ git config -l
~~~

~~~sh:system
$ git config --system -l
~~~

~~~sh:global
$ git config --global -l
~~~

~~~sh:local
$ git config --local -l
~~~

## config [オプション] : 個別設定確認

|オプション|内容|
|---|---|
|user.name|ユーザ名|
|user.email|メールアドレス|
|color.ui|出力色づけ|

~~~sh:ユーザ名確認
$ git config --global user.name
~~~

~~~sh:メールアドレス確認
$ git config --global user.email
~~~


## config [オプション] : 設定登録

~~~sh:ユーザ名登録
$ git config --global user.name [ユーザ名]
~~~

~~~sh:メールアドレス登録
$ git config --global user.email [メールアドレス]
~~~

~~~sh:出力色づけ登録
$ git config --global color.ui true
~~~

## config --unset : 設定削除

~~~sh:出力色づけ削除
$ git config --global --unset color.ui
~~~

## config --edit : 設定編集

~~~sh
$ git config --edit
~~~

# ■ リモートリポジトリ セットアップ

## init --bare : 新規作成

* サーバー側で実行

~~~sh
$ mkdir /home/username/test.git
$ cd /home/username/test.git
$ git init --bare --shared
~~~

# ■ ローカルリポジトリ セットアップ

## init : 新規作成

~~~sh
$ mkdir test
$ cd test
$ git init
~~~


## rm -rf : 削除

~~~sh:ディレクトリごと削除
$ cd ..
$ rm -rf test
~~~

~~~sh:git管理から外す
$ cd test
$ rm -rf .git
~~~


## remote add : リモートリポジトリ追加(origin指定)

~~~sh:sshデフォルトポート使用
$ git remote add origin username@ipaddress:/home/username/test.git
~~~

~~~sh:sshポート変更
$ git remote add origin ssh://username@ipaddress:portno/home/username/test.git
~~~


## remote add : リモートリポジトリ追加(shortname指定)

~~~sh:sshデフォルトポート使用
$ git remote add shortname username@ipaddress:/home/username/test.git
~~~

## git config --edit : リモートリポジトリ追加・削除

* editerで[remote "remoteName"]以下を削除

~~~sh
$ git config --edit
~~~

## git clone : リモートリポジトリコピー

~~~sh:sshデフォルトポート使用
$ git clone username@ipaddress:/home/username/test.git
~~~

~~~sh:sshポート変更
$ git clone ssh://username@ipaddress:portno/home/username/test.git
~~~

~~~sh:ディレクトリ名指定
$ git clone username@ipaddress:/home/username/test.git Hello-Wolrd
~~~

~~~sh:特定ブランチorTag名指定
$ git clone -b [branch名 or Tag名] --single-branch username@ipaddress:/home/username/test.git
~~~



# ■ リポジトリ構成

|管理場所|操作|
|:---:|---|
|ワークツリー||
|↓|add|
|インデックス||
|↓|commit|
|ローカルリポジトリ||
|↓|push|
|リモートリポジトリ||



# ■ リモートリポジトリ操作

## remote -v : 一覧表示

~~~sh
$ git remote -v
~~~


## remote rename : 名前変更

~~~sh
$ git remote rename [old name] [new name]
~~~


## remote show : 詳細情報取得

~~~sh
$ git remote show [remote name]
~~~


## remote set-url : URL変更

~~~sh
$ git remote set-url [remote name] [url]
~~~


## fetch : リモートリポジトリ最新履歴取得

~~~sh
$ git fetch [remote name] [branch name]
~~~
* remote name を省略すると追跡しているリモートリポジトリが対象
* branch name を省略すると全ブランチが対象


## pull : リモートリポジトリ変更取り込み

~~~sh
$ git pull [remote name] [branch name]   # fetch + merge = pull
~~~

* remote name を省略すると追跡しているリモートリポジトリが対象
* branch name を省略すると現在のブランチが対象


## push : リモートリポジトリブランチ反映

~~~sh
$ git push [remote name] [branch name]
~~~

~~~sh:追跡ブランチに設定
$ git push -u [remote name] [branch name]
~~~

* remote name を省略すると追跡しているリモートリポジトリが対象
* branch name を省略するとリモートリポジトリとローカルリポジトリの双方に存在するブランチが対象


## push --delete : リモートリポジトリブランチ削除

~~~sh
$ git push --delete [remote name] [branch name]
~~~


# ■ ブランチ操作

## branch : ブランチ一覧表示

~~~sh:ローカルブランチ表示
$ git branch
~~~

~~~sh:リモートブランチ表示
$ git branch -r
~~~

~~~sh:ローカル／リモートブランチ表示
$ git branrh -a
~~~

~~~sh:作業中ブランチのマージ済みブランチ一覧
$ git branch --merged
~~~

~~~sh:作業中ブランチの未マージブランチ一覧
$ git branch --no-merged
~~~

## fetch/branch : 新規リモートブランチ取り込み

~~~sh
$ git fetch origin [remote branch name]
$ git checkout [remote branch name]
~~~

## branch : ローカルブランチ作成

~~~sh
$ git checkout [base branch name] or [commit id]
$ git branch [new branch name]
~~~

~~~sh
$ git branch [new branch name] [base branch name] or [commit id]
~~~

## checkout -b : ローカルブランチ作成＆移動

~~~sh
$ git checkout [base branch name] or [commit id]
$ git checkout -b [new branch name]
~~~

~~~sh
$ git checkout -b [new branch name] [base branch name] or [commit id]
~~~

## fetch/checkout :  ローカルブランチ作成＆移動(リモートブランチベース)

~~~sh
$ git fetch origin [remote branch name]
$ git checkout -b [local branch name] [origin/remote branch name]
~~~

* リモートブランチをfetch後、リモートブランチをベースに、新しいローカルブランチを作成

## checkout  : ローカルブランチ切り替え

~~~sh
$ git checkout [branch name]
~~~

## branch -d : ローカルブランチ削除

~~~sh
$ git branch -d [branch name]
~~~


## branch -D : ローカルブランチ強制削除

~~~sh
$ git branch -D [branch name]
~~~


## branch -m : ローカルブランチ名変更

~~~sh
$ git branch -m [old branch name] [new branch name]
$ git push origin
~~~

* 旧ブランチはリモートに残ったままとなる


## show-branch : ブランチの派生元表示

~~~sh
$ git show-branch
~~~


## push : リモートへブランチ反映

~~~sh
$ git push [remote name] [branch name]
~~~


## push : リモートブランチ削除

~~~sh
$ git push [remote name] :[branch name]
~~~

## merge : ブランチ統合

~~~sh:merge履歴が残らず統合側ブランチのログが全て残る
$ git checkout [Base branch name]  # ベースのブランチへ移動
$ git merge [取り込み branch name]  # 取り込む側のブランチを指定。ローカルリポジトリまで反映。
$ git merge [commit id]
or
$ git merge --ff [取り込み branch name]
$ git merge --ff [commit id]
~~~

~~~sh:merge履歴が残り統合側ブランチのログが全て残る
$ git checkout [Base branch name]  # ベースのブランチへ移動
$ git merge --no-ff [取り込み branch name]  # 取り込む側のブランチを指定。ローカルリポジトリまで反映。
$ git merge --no-ff [commit id]
~~~

~~~sh:merge履歴、統合側ブランチのログが残らず、commit未実施の状態になる
$ git checkout [Base branch name]  # ベースのブランチへ移動
$ git merge --squash [取り込み branch name]  # 取り込む側のブランチを指定。ローカルリポジトリまで反映。
$ git merge --squash [commit id]
~~~

【コンフリクト発生部分】
```<<<<<<<``` 
```=======```
```>>>>>>>```

## mergetool : マージツール

~~~sh
$ git mergetool
~~~

## rebase : ブランチ統合
~~~sh
$ git rebase [branch name]
~~~

## cherry-pick : 任意のコミットの取り込み
~~~sh
$ git cherry-pick [commit id]
~~~

~~~sh:コミットメッセージ編集
$ git cherry-pick -e [commit id]
~~~

~~~sh:コミットスキップ
$ git cherry-pick -n [commit id]
~~~

~~~sh:範囲指定
$ git cherry-pick [commit id]^..[commit id]
~~~

# ■ ファイル操作

## add : インデックスへ反映

~~~sh
$ git add [file name1] [file name2]
~~~

~~~sh:全ファイル指定
$ git add .
~~~

## commit : ローカルリポジトリへ反映

~~~sh
$ git commit -m "[commit message]"
~~~

~~~sh
$ git commit -m "[commit message]" [finename]
~~~

## push : リモートリポジトリへ反映

~~~sh
$ git push [remote name] [branch name]
~~~

## rm -f : 強制削除

~~~sh
$ git rm -f *
~~~

## clean -n : ワーキングツリーのgit管理対象外のファイル確認

~~~sh:add済みのファイルは非表示
$ git clean -n
~~~

## clean -f : ワーキングツリーのgit管理対象外のファイル削除

~~~sh
$ git clean -f
~~~

## clean -d : ワーキングツリーのgit管理対象外のディレクトリ削除

~~~sh
$ git clean -d
~~~

## reset --hard : ワーキングツリー・インデックスをローカルリポジトリの状態に戻す

~~~sh
$ git reset --hard HEAD
$ git checkout HEAD -- filename
~~~

## reset --hard : ワーキングツリー・インデックス・ローカルリポジトリをリモートの状態に戻す

~~~sh
$ git reset --hard [remote name]/[branch name]
~~~

## reset --mixed : インデックス・ローカルリポジトリをリモートの状態に戻す

~~~sh
$ git reset --mixed [remote name]/[banch name]
~~~

## reset --soft : ローカルリポジトリをリモートの状態に戻す

~~~sh
$ git reset --soft [remote name]/[branch name]
~~~

## revert : 過去のコミットを訂正する

~~~sh
$ git revert [commit id]
$ git push origin
~~~

* Revertのコミットログが追加される

# ■ サブモジュール操作

## submodule add: サブモジュール追加
~~~sh
$ git submodule add https://github.com/xxx/yyy.git
~~~

## submodule add: サブモジュール一覧表示
~~~sh
$ git submodule
~~~

## submodule init: サブモジュール初期化
~~~sh
$ git submodule init
~~~

## submodule update: サブモジュール更新
~~~sh
$ git submodule update
~~~

# ■ 状態確認

## status : Gitステータス確認

~~~sh
$ git status
~~~


# ■ 差分確認

## diff : ワークツリーとインデックスの差分表示(add前に確認)

~~~sh
$ git diff [filename(option)]
~~~
【オプション】
```--stat```　　　：変更量表示
```--name-only``` ：ファイル名表示
```-UN```　　　　　：変更箇所の前後N行を表示


## diff --cached : インデックスとローカルリポジトリ(HEAD)の差分表示(commit前に確認)

~~~sh
$ git diff --cached [filename(option)]
~~~


## diff HEAD : ワークツリーとローカルリポジトリ(HEAD)の差分表示

~~~
$ git diff HEAD [filename(option)]  # HEADは作業中のブランチの先頭のこと
~~~


## diff HEAD : ローカルリポジトリ(HEAD)とリモートリポジトリの差分表示

~~~sh
$ git diff HEAD [remote name]/[branch name]   # ex) git diff HEAD origin/maseter
~~~


## diff : コミットIDで差分表示

~~~sh
$ git diff [commit id] [commit id] [filename(option)]
~~~

# ■ コミット履歴操作

## log : コミット状況確認

~~~sh
$ git log
~~~

【オプション】
```--oneline```　　：1行表示
```--graph```　　　：グラフ表示
```--numstat```　　：追加／削除行数表示
```--name-only```　：ファイル名表示
```--decorate```　　：ブランチ名表示
```--num-status```　：ファイルと修正属性表示

## reflog : コミット状況簡易確認

~~~sh
$ git reflog
~~~

## rebase : コミット修正

~~~sh
$ git rebase -i HEAD~2   # 直近2つのコミットを修正
$ git rebase --abort     # rebaseを破棄
$ git rebase --continue  # rebaseを継続
~~~

【オプション】
```pick```　　：コミットをそのまま使用
```reword```　：メッセージを修正してコミットを使用
```edit```　　：rebaseの停止
```squash```　：直前のコミットに統合
```fixup```　：メッセージを残さず直前のコミットに統合
```drop```　　：コミットを破棄

* "git push -f origin"で強制push

## blame : 行単位でcommit id表示

~~~sh
$ git blame [file name]
~~~

# ■ コメント操作
## amend : 最新のコメント修正
~~~sh
git commit --amend -m "正しいコメント"
~~~

# ■ タグ操作

## tag : タグ作成

~~~sh
$ git tag [tag name]
~~~

~~~sh:コメント付き
$ git tag -am "[comment message]" [tag name]
~~~


## tag -d : タグ削除

~~~sh
$ git tag -d [tag name]
~~~


## tag : タグ一覧表示

~~~sh
$ git tag
~~~

~~~sh:コメント付き
$ git tag -n
~~~


## push --tags : リモートへ反映

~~~sh
$ git push --tags
~~~

~~~sh
$ git tag push [tag name]
~~~

## tag -d : リモートからタグ削除

~~~sh
$ git tag -d [tag name]
~~~


## tag show : タグ情報の確認

~~~sh
$ git tag show [tag name]
~~~

# ■ ブランチ運用ルール

|ブランチ名|役割|
|:---:|:---|
|develop|作業用ブランチ。|
|feature|修正・機能追加用ブランチ。developから分岐しdevelopへ統合|
|release|公開準備用ブランチ。developから分岐しmasterへマージ|
|master|公開管理用ブランチ|
|hotfix|緊急修正ブランチ。masterから分岐し修正後master・developへマージ|

# ■ 一時作業の退避／復元

## stash : 現在の作業を一時退避

~~~sh
$ git stash
~~~


## stash list : 一覧表示

~~~sh:簡易表示
$ git stash list
~~~

~~~sh:詳細表示
$ git stash list -p
~~~

~~~sh:個別表示
$ git stash show stash@{0}
~~~


## stash pop : 作業の復元

~~~sh:最新作業の復元
$ git stash pop
~~~

~~~sh:指定作業の復元
$ git stash apply stash@{1}
~~~


## stash drop : 作業の削除

~~~sh:最新作業の削除
$ git stash drop
~~~

~~~sh:指定作業の削除
$ git stash drop stash@{1}
~~~

## stash clear : 全作業の削除

~~~sh
$ git stash clear
~~~

# ■ ファイルをGit管理から外す
.gitignoreに追加

~~~sh:任意のファイルを外す
test.md
~~~

~~~sh:任意の拡張子のファイルを外す
*.md
~~~

~~~sh:任意の拡張子のファイルを外す
*.md
~~~

~~~sh:任意のファイルを外さない
*.md
!test.md
~~~

~~~sh:特定のディレクトリ以下を外す
test/
~~~

~~~sh:コメント
# コメント
~~~