Gitコマンドまとめ

すぐ忘れるので、よく使うのをまとめた

### ヘルプを表示
```ruby:ターミナル
# ヘルプを確認する
$ git add --help
$ git diff --help

# ヘルプを抜ける
$ q
```

### gitの簡単な流れ
```ruby:ターミナル
# 最初だけ
$ git init

# 変更を追加する
$ git add

# 追加分をコミットする
$ git commit -m "メッセージ内容"

# リモートリポジトリを追加
$ git remote add リポジトリ名 URL

# リモートリポジトリを更新
$ git push origin master

# リモートリポジトリをローカルに反映
# fetch + merge
$ git pull

# リモートリポジトリをリモート追跡ブランチに反映
$ git fetch

# リモート追跡ブランチをローカルに反映
$ git merge
```

### git status
```ruby:ターミナル
# 状態確認
$ git status
```
### git add 関連
```ruby:ターミナル
# 全てをadd
$ git add -A

# 変更点をadd
$ git add -u

# 全てのファイルを取り消し
$ git rm --cached -r .

# 特定のファイルのみ取り消し
$ git rm --cached -r file_name
$ git reset HEAD sample.txt

# 直前のadd全て取り消し
$ git reset HEAD .
```

### git commit　関連
```ruby:ターミナル
$ git commit --amend -m  #直前のcommitを変更
```

```ruby:ターミナル
# 過去のcommitを修正
$ git log --oneline
f4352a2 (HEAD -> develop, origin/develop) commit1
56a4eb1 commit2    #　修正したいcommit
6839af4 commit3    #　修正したいcommit
0340d1a commit4

$ git git rebase -i 0340d1a    # 修正したいcommitの1つ前を選択

# vimでエディタが開く
$ pick 56a4eb1 commit2 
$ pick 6839af4 commit3 
$ pick 0340d1a commit4

# iでINSERTモードにpickをeditに変える
# ESC(Cntl+Cも可)でINSERTモードを抜ける
# :x で保存して終了

$ git commit --amend    # editにしたcommitを修正できる。修正したら :x で終了
$ git rebase --continue   # rebaseを次に進める(次のeditに移動)
```

### git fecth 関連
```ruby:ターミナル
# リモートリポジトリで先に更新した時
$ git fetch origin
$ git diff origin/master
$ git merge origin/master
```

### git pull　関連
```ruby:ターミナル
$ git pull
$ git pull --no-edit # viエディタを開かずにpullする

```

### ブランチ　関連
```ruby:ターミナル
$ git branch -a  現在のブランチを確認
$ git checkout ブランチ名   ブランチに移動
$ git checkout -b ブランチ名     新規ブランチを作成して、移動
```

### git push 関連
```ruby:ターミナル
$ git push -u origin develop   developブランチを上流ブランチに設定
```

### git diff 差分を確認する
```ruby:ターミナル
# 前回コミット(HEAD)からの差分
$ git diff HEAD

# git add した後の差分確認
$ git diff --cached

# ファイル名のみを表示
$ git diff --name-only

# 不要な追跡を除外し、ファイルを削除
$ git rm file_name

# 不要な追跡を除外し、ファイルは残す実際のファイルは残して、追跡だけ除外
$ git rm --cached file_name
```

### git log 自分がしたコミットを確認

```ruby:ターミナル
# コミットログを参照する.
$ git log

# 修正したファイル一覧
$ git log -p --name-only

# 変更内容差分, ファイル名を引数で渡すと単体で指定可
$ git log -p

# コミットログの先頭７桁のコミットIDを表示する.
$ git log --oneline 

# コミットログのHEADの位置を明示する.
$ git log --decorate

# コミットログを縦グラフで表示する.
$ git log --graph

# 指定した文字がコミットログに含まれるコミットを表示する.
$ git log --grep [filter] 

# 未プッシュのコミットを確認
$ git log origin/[ブランチ名]..[ブランチ名]

# 組み合わせて使える
$ git log --oneline --graph --decorate
```

### 退避
変更を退避する

```:ターミナル
$ git stash save
or
$ git stash
```

### Git管理をはずす
#### ディレクトリごとはずす
``.git``ファイルを削除する

#### .gitignoreを使って指定したファイルやフォルダをはずす
.gitignoreに記載すると、git管理の対象から外すことができる。
個人的にはパスワードなどの個人情報を含むファイルや、一時的な動作確認でgit管理しないものなどをgitignoreに指定している。
```python:.gitignore
# 特定のファイル(temp.txt)を除外する
tmp.txt

# 特定のフォルダ(tmp)を除外する
tmp/

# 特定の拡張子(.jpg)を除外する
*.jpg
```


### Git を間違ってpushしたとき
#### git reset
ミスをなかったことにする。
※扱いには注意

```ruby:ターミナル
# なかったことにする
$ git reset

# resetした後は強制的にpush
$ git push -f
```

#### revertをcommitしてpush
ミスの履歴を残す。
revetで新しいcommitができるので、それをpushする

```ruby:ターミナル
# 直前のコミットを打ち消すコミット
$ git revert
$ git revert HEAD

# 最新をふくめ、過去4つ分のコミットを打ち消す
$ git revert HEAD~3

$ git push origin master
```

#### 変更してしまっため、revertできない場合
```:ターミナル
error: Your local changes to the following files would be overwritten by merge:
Please commit your changes or stash them before you merge.
Aborting
fatal: revert failed
```

```:ターミナル
$ git stash
```
で変更を退避してから

```:ターミナル
$ git revert HEAD
```

### viの操作
``:q`` または ``:q!``で抜け出せる。


### mergeする


## 参考資料
### 基本
[基本的なGitコマンドまとめ](https://qiita.com/2m1tsu3/items/6d49374230afab251337)
[gitを使用したブランチ作成からpushまでの簡単な流れ](https://qiita.com/infratoweb/items/5021a36f69f26dc7f0b9)
[【初心者向け】git fetch、git merge、git pullの違いについて](https://qiita.com/wann/items/688bc17460a457104d7d)
[第1話 リポジトリを作ってコミットしてみよう【連載】マンガでわかるGit ～コマンド編～](https://www.r-staffing.co.jp/engineer/entry/20190621_1)

### branch
[ブランチ切って更新してマージするまでの流れ](https://qiita.com/shuntaro_tamura/items/6c8bf792087fe5dc5103)

### commit
[Gitのコミットメッセージの書き方](https://qiita.com/itosho/items/9565c6ad2ffc24c09364)
[僕が考える最強のコミットメッセージの書き方](https://qiita.com/konatsu_p/items/dfe199ebe3a7d2010b3e)
[Gitのコミットメッセージを後から変更する方法をわかりやすく書いてみた](https://www.granfairs.com/blog/staff/git-commit-fix)
[Git，rebaseで過去のコミットの修正を行う．](https://hacknote.jp/archives/58581/)

### 
### push
[git push -u とは？](https://saitoblog.page/posts/2020-04-11)
[Git用語：上流ブランチとは？](https://www-creators.com/archives/4931)

### revert & reset
[Git で コミットを無かったことにする方法 （git revert の使い方）](https://akiyoko.hatenablog.jp/entry/2014/08/21/220255)
[git revertでエラーが出ます](https://teratail.com/questions/121084)
[【git】revretしたcommitをまたrevertして戻した話](https://tmicha.hateblo.jp/entry/2017/04/26/140548)
[【gitコマンド】いまさらのrevert](https://qiita.com/chihiro/items/2fa827d0eac98109e7ee)
[git pushを取り消す方法](https://qiita.com/S42100254h/items/db435c98c2fc9d4a68c2)
[git reset --soft で複数のcommitを取り消す](https://it-ojisan.tokyo/git-reset-soft-multi/)

### diff
[git 差分を見る](https://qiita.com/ikenji/items/42248085c4f4b55660d6)
[忘れやすい人のための git diff チートシート](https://qiita.com/shibukk/items/8c9362a5bd399b9c56be)
[【初心者向け】git diffの使い方を実例で解説｜コードの変更内容の表示、git addしたファイルとの差分、指定したコミット同士で違いを確認する方法](https://prograshi.com/general/git/how-to-use-git-diff/)

### stash
[【git stash】コミットはせずに変更を退避したいとき](https://qiita.com/chihiro/items/f373873d5c2dfbd03250)

### pull
[gitのリモートリポジトリの更新を確認する](https://qiita.com/yuyuchu3333/items/a30387bdd6a0afc1185c)
[【初心者向け】git fetch、git merge、git pullの違いについて](https://qiita.com/wann/items/688bc17460a457104d7d)
[git develop, feature branch作成からmergeするまで　(自分用メモ)](https://qiita.com/Naoki206/items/e5520453f92dcd4274f1)

### .gitignore
[.gitignore の書き方](https://qiita.com/inabe49/items/16ee3d9d1ce68daa9fff)
[.gitignore の書き方。ファイル/ディレクトリの除外](https://www-creators.com/archives/1662#gitignore-2)
[【Git】.gitignoreが反映されない時の対応備忘録](https://goat-inc.co.jp/blog/2634/)

### merge
[git develop, feature branch作成からmergeするまで　(自分用メモ)](https://qiita.com/Naoki206/items/e5520453f92dcd4274f1)

### その他
[git ローカルの変更を元に戻す方法](https://qiita.com/macer_fkm/items/ea2337a9b504b982c295)
[untracked fileを削除するためにはgit cleanを使う](https://qiita.com/tmyn470/items/c8359e4ec92d1f462bdf)
[git 管理をやめる](https://qiita.com/b4b4r07/items/cac4abd9ae66537e2833)
[Vim / Vi を終了させる方法](https://qiita.com/kon_yu/items/b8864ff566b8b67a9810)
[GitHub – READMEの作成方法と書き方【改行やリンク・画像の入れ方】](https://howpon.com/8334)