git コマンド　チートシート

自分用のチートシート
前提　WindowsPowerShellでGitをインストール済み

## ローカルリポジトリ作成〜コミットまで

新規リポジトリの作成

```
git init
```

ステージングの状態の確認

```
git status
```

変更ファイルをステージング

```
git add [ファイル名]
```

ファイルの変更差分の確認

```jsx
git diff 
```

ステージングしたファイルの差分確認

```jsx
git diff --staged
```

ステージングしたファイルを記録する

```
git commit -m "コミットメッセージ"　
```

コミットメッセージの修正

```
git commit --amend -m "コミットメッセージ"　
```

## コミット後の確認

コミット履歴の確認

```
git log
**:qでlogの閲覧を終了する**
```

コミット内容の確認

```
git show [コミットID]
```

コミット同士の差分を確認する

```
git diff[コミットID]..[コミットID]
```

ブランチ同士の差分の確認

```
git diff [ブランチ名]..[ブランチ名]
```

リモート追跡ブランチとの差分確認する場合

```
git pullする前に確認
git fetch origin
git diff HEAD..origin/main

git pushする前に確認
git diff origin/main..HEAD
```

## 作業の修正

作業中の変更を前回のコミット時まで戻す

```
git restore [ファイル名]
```

ステージングを解除する

```
git restore --staged [ファイル名]
```

特定のファイルを、特定のコミット時点に戻す

```
git restore --source[コミットID][ファイル名]
```

コミットを取り消す

```
git reset —soft HEAD^
**—softは直前のコミットのみ取り消す**
```

```
git reset —mixed HEAD^
**—mixedはコミットとステージングを取り消す**
```

```
git reset —hard HEAD^
**—hardはコミット、ステージング、作業エリアまで取り消す**
```

^は何個前のHEADかを表す。^^とすれば２個前など。

~ｎ（ｎ個前のコミットに戻る）やコミットIDで戻りたいコミットの指定も可能。

操作履歴の確認（ミスした操作をresetするときなどに参照できる）

```
git reflog
```

コミットを取り消す

```
git revert [打ち消したいコミットID]
**コミットメッセージの編集後Esc→:wqで確定**
```

作業中のコミットしたくない内容を一時退避

```
git stash save
```

stashで保存したリストを見る

```
git stash list
```

stashの復元と削除

```
git stash apply stash@{0}　復元
git stash drop stash@{0}　削除

上記をまとめて実行
git stash pop stash@{0}
```

stash@{0}やHEAD{0}での実行でエラーになったときの対処法（windows power shell）

[https://crieit.net/posts/PowerShell-Git-reset-stash](https://crieit.net/posts/PowerShell-Git-reset-stash)参考

## ブランチの作成、切り替え、マージ

ブランチを作る

```jsx
git branch [ブランチ名]
```

ブランチの一覧を確認する

```jsx
git branch
```

GitHubのブランチも含めて確認する

```jsx
git branch -a
```

ブランチを切り替える（HEAD切り替え）

```jsx
git switch [ブランチ名]
```

ブランチを新規作成して切り替える

```jsx
git switch -c [ブランチ名]
```

変更をマージする（masterブランチから操作）

```jsx
git merge [ブランチ名]
```

GitHubのブランチをローカルのブランチにマージしたい

```jsx
git merge origin/main
```

コンフリクトしたら

```jsx
vi [ファイル名]
```

で正しいコミット内容に修正する

マージ済みのブランチの一覧表示

```
git branch --merged [ブランチ名]
```

マージ済みローカルブランチの削除

```
git branch -d [ブランチ名]

まだマージ完了していないブランチを削除する場合は　-D　を使う
```

## 必要なコミットだけを取り込むチェリーピック

別のブランチから今いるブランチへ必要なコミットだけコピーしてくる

```
git cherry-pick [コミットID]

複数のコミットを指定する場合
git cherry-pick [コミットID①]..[コミットID②]

コミットせず作業ディレクトリいだけ変更する
git cherry-pick -n [コミットID] 
```

## マージとは別の合流リベースコマンド

①のブランチを②のブランチに合流させる

```jsx
git rebase origin/[ブランチ名]① [ブランチ名]②
```

フォースプッシュ(リモートを無視してローカルを正として強引にプッシュを行う)

```jsx
git push origin -f
```

## リポジトリ内の検索

特定の文字列を含む箇所の検索（大文字小文字区別する）

```
git grep "検索したい文字列"

コミットやブランチの指定
git grep "検索したい文字列" [コミットIDやブランチ]

ファイル名のみ表示
git grep -l "検索したい文字列"
```

ファイル名と行番号が表示されるように設定変更する場合

```
git config --global grep.lineNumber true
```

各行にコミットした人の名前と日時を表示する

```
git blame [ファイル名]
```

## Git Hubとの連携

GitHubと連携するための設定

```jsx
git config --global [user.name](http://user.name) "登録したユーザー名"
```

```jsx
git config --global [user.email](http://user.email) [登録したemail]
```

リモートリポジトリを追加

```jsx
git remote add origin [URL]

git remote add [リモートリポジトリの呼び名] [URL]
```

リモートリポジトリの削除(連携を解除するだけ)

```
git remote rm [リモートリポジトリの呼び名]
```

リモートリポジトリの確認

```
git remote -v
```

リモートリポジトリに変更情報をアップロードする

```jsx
git push origin [ブランチ名]
```

リモートリポジトリから最新の情報を取得し反映する（fetch+merge）

```jsx
git pull origin [ブランチ名]
```

リモートリポジトリから最新の情報を取得する

```jsx
git fetch origin
```

エイリアス設定したときWindowsPowerShellで少し手間取ったので今度それも記事に使用と思った。