GitHub 初期設定〜使い方まで Vol.2


# 各種基礎コマンド
## 管理しないファイルをGitからの除外
***●管理しないファイルをGitから外す***
.gitignoreファイルを作成する
↓
ファイルの中に記載されたファイルやディレクトリ等は外される
・ファイル名を記載
・（ディレクトリ名)/
・/*/*.css
<br>

## 変更の取り消し
***●ファイルへの変更を取り消す(ワークツリーの内容を前回addした状態に戻したい時)***
ワークツリーの情報を、ステージの内容に合わせる
``` $ git checkout — <ファイル名>``` 
``` $ git checkout — <ディレクトリ名>``` 

**□全ての変更を取り消す**
``` $ git checkout — .``` 
<br>

***●ステージにaddした内容を取り消したい時(前回のcommit内容に戻る。ワークツリーの内容は変わらないので、ワークツリーも戻したい場合は上記のコマンドを入力)***
``` $ git reset HEAD <ファイル名>``` 
``` $ git reset HEAD <ディレクトリ名>``` 

**□全てのadd内容を最新commit情報に戻す**
``` $ git reset HEAD .``` 
<br>


***●上記2パターンを一つのコマンドでで行いたい時***
▽git reset HEADと同意
``` $ git restore -S <ファイル名>``` 
``` $ git restore -S <ディレクトリ名>``` 
↓
▽git checkoutと同意
``` $ git restore <ファイル名>``` 
``` $ git restore <ディレクトリ名>``` 

**□全てのadd内容を最新commit情報に戻し、ワークツリーも元に戻す**
``` $ git restore -S .``` 
↓
``` $ git restore .``` 
<br>

***●直前のコミットを取り消したい時(リモートリポジトリにpushファイルは、やり直してはいけない)***
$ git commit —amend
$ git commit —amend -m (コミットメッセージ)
<br>

## リモートリポジトリからの情報取得
***●設定しているリモートリポジトリの情報を表示する***
``` $git remote``` 
``` $git remote -v ``` (URLを表示) 
<br>

***●リモートリポジトリから情報を取得する（fetch）***
``` $ git fetch <リモート名>``` 
　この段階ではワークツリーには反映されない
↓
``` $ git merge <リモートリポジトリ名>/<ブランチ名>``` 
``` $ git merge origin/master``` 
<br>

***●リモートリポジトリから情報を取得し、マージする（pull）***
誤って使うと、想定しないブランチにmergeされてしまうので注意
```$git pull <リモートリポジトリ名>/<ブランチ名>```

**□変更等なく単純に最新情報のみ取得したい時は、—rebaseオプションをつけると、mergeコミットが残らないので履歴がきれいになる。**
```$git pull —rebase <リモートリポジトリ名>/<ブランチ名>```

・PC全体でpullの時はrebaseにする方法　```$git config —global pull.rebase true```
・mainブランチの時のみrebaseにする方法  ```$git config branch.main.rebase true```

**□上記コマンドは省略可能**
```$ git pull```

**□下記コマンドと同じ意味**
```$git fetch origin master```
```$git merge origin/master```
<br>

---
***●リモートリポジトリの名称変更***
```$ git remote rename <旧リモート名><新リモート名>```
<br>

---
***●リモートリポジトリの削除***
```$ git remote rm <リモート名>```
<br>



## ブランチについて

***●ブランチを新規追加する***
```$ git branch <ブランチ名>```
<br>

***●ブランチの一覧を表示する***
```$git branch ```
```$git branch -a```
<br>


***●ブランチを切り替える***
$git checkout (既存ブランチ名)

**□ブランチを新規追加して、切り替える**
$git branch -b checkout (ブランチ名)

<br>

## merge,commitについて
●変更履歴をマージする
```$ git merge (ブランチ名>```
```$ git merge <リモート名>/<ブランチ名>```


**□コンフリクトが発生した場合**
```
<<<<<<<HEAD
(HEADの情報)
======
(mergeしようとしたブランチの情報)
>>>>>>>(ブランチ名)
```

上記のようにコンフリクト情報が表示れるため、表示されたら修正し改めてaddとcommitを行う。

<br>


***●ブランチ名を変更する***
```$git branch -m <ブランチ名>```

<br>

***●ブランチを削除する(pushした後に、ブランチが必要と無くなった場合などに使用)***
```$git branch -d feature```
```$git branch -D feature ```(強制削除)

<br>

***●リベースで履歴を整えた形でmergeする***
(pushした後のブランチに関しては使用NG)
```$ git rebase <ブランチ名>```

例）mainブランチがリリース用で、developコマンドが開発用ブランチだった場合
developブランチで
```$git rebase main```
そして、mainブランチに移動し
```$git merge develop```を行う（ファストフォワード）


・Pushしていないローカルの変更はrebase
・履歴を明示的に残したいorコンフリクト置きそうな時はmerge
がおすすめ
<br>




***●コミットをきれいに書き換える（Git HubにPushしていないコミットのみ）***
**□ 直前のコミットを書き換える**
```$ git commit —amend```

**□ 複数のコミットをやり直す**
```$ git rebase -i <コミットID>```
例）```$git rebase -i HEAD~3```

上記コマンド入力すると、エディタが立ち上がる

例）
pick 5ccfca5 1.txtを追加
pick b265b3a 2.txtを追加
pick 1c449d9 3.txtを追加

・pickの部分を、editに編集するとコミットメッセージの変更
・pickの部分を、squashに編集(2つ以上)するとコミット履歴の統合
・行を削除するとコミット内容や、それに伴う情報が削除される
・コミットの情報を修正したい時は、editに書き換え、$git reset HEAD^と入力しHEADの情報を削除し、addからやり直す
<br>


## タグを作成する


***●タグを作成する(リリースポイント等に使用)***
```$ git tag -a <タグ名> -m “<メッセージ>”```
例）```$ git tag -a 20230112_01 -m “version 1.0”```


***●タグをリモートリポジトリに送信する***
```$ git push <リモート名> <タグ名>```

**□全て送信する**
```$ git push origin —tags```


## 作業を避難する


***●作業を一時避難する（作業が途中でまだコミットしたくないけど、別のブランチで作業したい時）***
```$ git stash```


***●避難した作業を確認する***
```$ git stash list```


***●避難した作業を復元する***
**□ 最新の作業を復元する**
```$ git stash apply```

**□ステージの状況も復元する**
```$ git stash apply —index```


**□ 特定の作業を復元する**
```$ git stash apply <スタッシュ名>```
例）```$ git stash apply stash@{1}```


***●避難した作業を削除する***
**□最新の行を削除する**
```$ git stash drop```

**□特定の作業を削除する**
```$ git stash drop <スタッシュ名>```

**□ 全作業を削除する**
```$git stash clear```