Git 環境構築＆コマンドまとめ

Gitで困ったら見る、チートシート的にメモを残していきます。


## Git環境構築

### Gitのダウンロード
Gitがまだインストールされていない場合、以下ページよりダウンロード＆インストール
[Gitダウンロードページ](https://git-scm.com/downloads "Gitダウンロードページ")

### Gitが入っているか確認
```bash
git --version
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2709025/db6c9ad0-69f7-11e4-7bca-0f835a3692ac.png)
インストールされていれば、バージョンが表示される

### 現在のGit設定を確認
```bash
git config --global --list
```


### ユーザー名設定
```bash
git config --global user.name "test name"
```


### メールアドレス設定
```bash
git config --global user.email testmail@test.com
```


### Git用のフォルダとして設定する
```bash
git init
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2709025/4c73d511-7c53-b1c8-bba8-414f3734c287.png)

「.git」というフォルダが作成されている
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2709025/f3fd3e65-a59f-808f-0442-0a6d4e18ac5b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2709025/f0b19358-062b-a500-6745-6ee61a7befa8.png)


### フォルダ内 ローカルでのユーザー設定
```bash
git config --local user.name "テストユーザー"
```


### core.editor にVS Codeを登録
VS Codeがあるディレクトリパスを入力
```bash
git config --local core.editor 'C:\\Users\\admin\\AppData\\Local\\Programs\\Microsoft VS Code --wait'
git config --local core.editor 'code --wait'
```


### 設定の取消
```bash
git config --local --unset [設定対象]
git config --local --unset core.editor
```


## ファイル生成、追跡


### 適当なファイル生成
```bash
vi sample.txt
```

### branchの切り替えや確認
``` bash
# branchを「CSS」に切り替える
git checkout -b css
# 直前のbranchに戻る
git checkout -
```

``` bash
# どこのbranchにいるか確認
git branch
```

### branchから削除する
``` bash
git branch -d [branch名]
git branch -d css
```


### Gitディレクトリの状態確認
```bash
git status
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2709025/e6639326-2175-9316-b3aa-f5e928548399.png)

```text:翻訳
ブランチマスターについて
まだコミットはありません
追跡されていないファイル：
   （「gitadd <file> ...」を使用して、コミットされる内容に含めます）
         sample.txt

コミットするために何も追加されていませんが、追跡されていないファイルが存在します（追跡するには「git add」を使用してください）
```

### 変更箇所の確認
``` bash
# 変更箇所の確認
git diff
# git add した後にインデックスと最新のコミットと、ステージ状態の変更点を見たいとき
git diff --cached

# 「q」を押して戻る
```

## ステージ

### Gitの[ステージ]にファイルを渡す
```bash
git add ["対象ファイル"]
git add sample.txt
git add .
# [.]で全てを指定可能
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2709025/8d8abc2c-0b6e-c628-4b35-6eb59bf3f611.png)


### Gitディレクトリの状態再確認
```bash
git status
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2709025/3f860d15-ddc0-a846-e307-3c26b9ccd854.png)
```text:翻訳
ブランチマスターについて
まだコミットはありません
コミットする変更：
   （ステージングを解除するには、「git rm --cached <file> ...」を使用します）
         新しいファイル：sample.txt
```

### Gitの[ステージ]から取り除く
```bash
git rm --cached ["対象ファイル"]
git rm --cached sample.txt
```

## コミット

### Gitの[ステージ]ファイルを[コミット]に渡す
```bash
git commit
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2709025/484efdd7-b125-78ee-bc4f-9346d64cd668.png)


### 自分でメッセージ付きで保存
``` bash
git commit -m "最初のcommit"
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2709025/6d82ffd8-e5bd-fe0a-4236-ca21cdf47bbc.png)


### Gitの状態確認
```bash
git status
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2709025/1dd70d5d-abc7-761c-2d03-7fab46f7a931.png)
```text:翻訳
ブランチマスターについて
コミットするものは何もありません。
```


### ファイルを変更してみる
```bash
vi sample.txt
```

### Gitの状態確認
```bash
git status
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2709025/6a06a353-7219-5213-4871-f0f26bd84df9.png)


```text:翻訳
ブランチマスターについて
コミットのためにステージングされていない変更：
   （「git add <file> ...」を使用して、コミットされる内容を更新します）
   （「git restore <file> ...」を使用して、作業ディレクトリの変更を破棄します）
         変更：sample.txt

コミットに変更は追加されません（「gitadd」および/または「gitcommit-a」を使用）
```


### Gitのコミット履歴確認
```bash
git log
git log --oneline
git reflog
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2709025/d47da1a8-5910-783f-2263-1051ab1b215a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2709025/6b237002-d0be-7f5f-1f87-7ebd2765bca3.png)



### 直前のコミットを取り消し
```bash
git reset --hard HEAD^
# HEAD指定
git reset --hard HEAD@{0}
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2709025/19e653a2-eeef-05cf-1b02-65071ee6c64e.png)

### ファイル変更＆ファイル追加 ステータス確認
```bash
git status
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2709025/70fe577c-e148-8843-4e07-825a4ed8bd2b.png)

ローカルで変更したが、まだコミットされていないファイルと
ステージに上がっていないファイルがあるとのこと

### 変更を戻す
```bash
git restore sample.txt
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2709025/6b34d387-ced7-9600-d0ed-bdec0e7d0679.png)

### branchにいる状態でmasterからデータを取り込む
``` bash
git merge master
```

## マージ

### マージ(結合)する
``` bash
# master側に移動してから、「css」のデータをmergeする
git merge [branch名]
# commitは残らない

git merge [branch名] --no-ff
# commitを残せる
```

### branchから削除する
``` bash
git branch -d [branch名]
git branch -d css
```


## VS Code での作業
1. VS Code で[フォルダを開く]
1. 「git init」したフォルダを選択
1. ファイル作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2709025/6a217dbe-5cc9-a9b7-d5d1-33e088d29dc0.png)
1. [ステージ]に追加　(add)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2709025/2ad09255-dc32-e08a-6723-11242e46d358.png)
1. [コミット]に移動　(commit)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2709025/41dbe6ad-eba8-f344-7fd9-6813db2e7336.png)
1. コミットが完了
```bash
git status
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2709025/c897c681-16a4-8205-bf41-4e9d3c015ab2.png)

### 追跡対象ファイルから除外
```bash
vi .gitignore
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2709025/90c415a9-39e1-ab49-c769-ddab0fb0c968.png)


### コンフリクトについて

masterの状態
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2709025/746b4837-9fbf-e223-a2c7-ef307ae3643f.png)

branchを切り替え
```bash
git checkout -b css
```

cssブランチ側で編集してcommit
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2709025/f93c2a4e-a1df-90be-496d-155ed35b20b3.png)

branchをmasterに戻す
```bash
git checkout -
```

データは編集前の状態
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2709025/e9dd8896-b69e-f764-0eee-3c8289c36c34.png)

master側でも同じ箇所を編集する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2709025/ed775e92-2b62-0f3e-878f-85067002acf4.png)

master側でもcommitする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2709025/7366b450-eb63-300c-82dd-6a9d8199161d.png)

mergeしてみると、コンフリクトが起こる
```bash
git merge css
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2709025/0a1ff1c5-f181-0120-8bd5-65a17fd1d1b2.png)

「compare changes」で変更を比較する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2709025/fd72a5a8-9472-680c-8321-f79739627c43.png)

「Accept Both Changes」を選択して両方残す　（Currentはmaster Incomingはbranch）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2709025/cd098568-bd37-f602-54d6-4a9b158cd599.png)

Gitのbranch表示がマージ中になる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2709025/6752346f-a09c-4380-8ad9-17f243c7bc3a.png)


ステータスを確認してみる
```bash
git status
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2709025/a77b79e8-0df7-5a59-4c69-7360c320e59d.png)

残す方をmaster側で編集してmergeすればOK