Git事始め

みんなgit使ってるけど実は使い方に自信ないぜ！っていう人向けに最低限必要な操作方法をまとめる。

# 接続アカウント
案件によってGitのログインアカウントが異なる場合があるので、そのときは都度user.name、user.emailを変更する。
### 設定確認
```
git config -l
```

### アカウントの設定変更
```
git config --global user.name "[Gitのアカウント名]"
git config --global user.email "[メールアドレス]"
```


# SSH接続設定
(1) ローカルPCで公開鍵と秘密鍵を作成（すでに作成済みの場合は再利用する）

```
cd ~/.ssh
ssh-keygen -t rsa -C "[メールアドレス]" -b 4096
```

(2) こんな感じで作られてるのが確認できるはず。この公開鍵をコピーし、GitHub側で登録する

```
cat ~/.ssh/id_rsa.pub
```

(3) 端末側で鍵を登録する

```
ssh-add ~/.ssh/id_rsa
```
※イメージ図
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/234929/a2ec6f85-f273-1574-5c56-7e00311c1e27.png)


# リポジトリ作ったら最初に使うコマンド
## リポジトリに既にコードがあるので、ローカルにコードを持ってきたい場合

### (1)クローン
まずクローンする。この操作でローカルに持ってこれるのはmasterブランチのみ。

```
git clone git@hogehoge.jp:xx.git 
```

※git@～の部分は、githubやgitlabなど使ってるサービスによって異なるので、各サービスの「clone」ボタンからコマンドを確認しよう

ではローカルに持ってこれたブランチ情報をみてみよう

```
git branch -a
* master
  remotes/origin/master
```
「*」は今このブランチをみてるよっていう印


### (2) ブランチを変更する
masterブランチに直接コードをあげるのは稀。masterなので綺麗なコードを管理したいからね。ごちゃごちゃコード弄るときはだいたいdevelopブランチ等の専用ブランチで管理をする。このとき、「作業するブランチを切り替える」ということをする。

たとえばdevelopブランチをローカルに持ってくる（＝ローカルにdevelopブランチを新規作成してリモートのdevelopブランチに紐づける）

```
git branch develop origin/develop
```
すると、こんな風になってるはず

```
git branch -a
* master
  develop
  remotes/origin/master
  remotes/origin/develop
```

同時にブランチ切り替えもしたい場合はこう↓

```
git checkout -b develop origin/develop
```

ん？じゃあこのdevelopブランチは最終的にmasterブランチにも反映しなきゃいけないんじゃ？
っていうときにマージという仕組みを使う。今回は「とりあえずgitを操作できるようにする」のが目標なのでいったん省略。


## ローカルにコードがある（or これからコードを書く）ので、該当箇所をgit管理したい場合

### (1) リポジトリ作成
まずhttps://github.com/ など使う場合はそちらにログインし、新規にリポジトリを作る。

### (2) git管理したい場所に移動
コードを置いてる場所に移動する

```
cd [git管理したい任意のディレクトリ]
```
たとえば...
> Cドライブ
　└ project
　　└ hoge_project
　　　└ 99_src
　　　　└ HelloWorld
　　　　　└ index.html
　　　　　└ css
　　　　　└ ...

HelloWorldディレクトリ以降をgitにあげたい場合は、このようになる

```
cd C:\project\hoge_project\99_src
```
指定したディレクトリの配下がgit管理されることになる。次の初期化をすることで、これがローカルリポジトリになる。

### (3) 初期化

以下のように実行すると、ディレクトリ配下が空の場合、ローカルにリポジトリを作成して初期化される。
空でない場合、配置してるファイル達がローカルのリポジトリに変換される。

```
git init
```
### (4) add & commit する
もし、まだなにもファイルが無い場合は、適当にREADMEという名前の空ファイルを作成しておくこと

addするとローカルリポジトリのインデックスに登録する

```
git add [ローカルリポジトリに追加したいファイル]
```

もしすべてのファイルをaddしたいときはこう

```
git add .
```

次にインデックスの内容をローカルリポジトリにコミットする

```
git commit -m "コミットログ"
```

### (5) ローカルリポジトリとリモートリポジトリを紐づける
以上でローカルリポジトリは最新化した。次に、これをリモートのリポジトリにpushする。ローカルだけでgit管理してても意味ないからね。
以下のコマンドでローカルリポジトリとリモートリポジトリを紐づける。

```
git remote add origin https://~/[さっき作成したリモートリポジトリ.git]
```

またはこう↓　SSH接続できてるならこのコマンドでOK。

```
git remote add origin git@github.com:[さっき作成したリポジトリ名].git
```
※git@～の部分は、githubやgitlabなど使ってるサービスによって異なるので、各サービスの「clone」ボタンからコマンドを確認しよう

### (6) リモートリポジトリにpushする

```
git push origin master
```



# 開発中に何度か使うコマンド
やれやれこれでめでたくgit管理できるようになった。
では開発を進めていくわけだけど、だいたい
(1)ファイル編集
(2)git add
(3)git commit
(4)git push
という流れで、キリのよいタイミングで定期的にgitにpushするとよい。
上記でも登場した `branch -a` `add` `commit` といったコマンドは開発中何度も使うことになる。

### いまいるローカルブランチと、他のブランチ一覧を確認
間違えて意図しないブランチに書き込まないように、事前に今いるブランチを確認する癖をつけよう。

```
ローカルブランチを確認する
git branch
リモートブランチを確認する
git branch -r
上記２つを一度に行う
git branch -a
```

### ローカルブランチを切り替える
```
git checkout [branch名]

↓開発用ローカルブランチを新規作成&ブランチ切り替えするときはこれ
git checkout -b [branch名]
```

### ファイルを編集し...

### ファイルの編集内容を確定（commit前に何度してもいい）
```
git add .
```

### 確定したファイルをコミット（push前に何度してもいい）
add済みのファイルをcommitする

```
git commit "コミットログ"
または
git commit 
するとviが開くので、そこにコミットログ記入
```

### プッシュ
commit済みのファイルをpushする

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

これで編集したファイルをリモートリポジトリにあげられた。
開発中はこの繰り返し。

複数人で同じリポジトリを操作する場合は、マージやらフェッチやら他にも操作が必要になるけど、まず基本的はことは以上となる。


# その他便利なコマンド
### 開発途中で、ローカルのブランチにリモートの内容を取り入れたい
編集中のファイルをすべてcommitしたあとに、

```
git pull origin [取得したい任意のリモートブランチ名]
```

### 編集をすべて取り消す
```
git checkout .
```

### 編集を特定ファイルのみ取り消す
```
git checkout [ファイルパス]
```

### 編集したファイルがあるかどうか確認する
addしてないファイルは赤字、addしたけどcommitしてないファイルは緑字でリスト表示される
すべてcommit済みの場合は何も表示されない

```
git status
```

### 差分をすべて確認する
```
git diff
```

### 差分を特定ファイルのみ確認する
```
git diff [ファイルパス]
```

### 直前のコミットを取り消す（ローカルブランチの編修内容はそのまま）
```
git reset --soft HEAD^
```

### 困ったとき、コミットログ（履歴）など調べる
```
git  log
```

### ローカルブランチ削除（マージしたかどうか問わず消す）
```
git branch -D [ブランチ名]
```

# 注意事項
* pushは同じブランチ名に対してしかできない
* pullはどのブランチに対してもできる