git githubをまとめてみた

# 概要
gitの使い方のメモです。
筆者のプログラミングの経験は以下です。

git: 1週間

そのため、理解が間違っている箇所が多々あると思いますがご了承ください。

#各種バージョン
npm : 6.14.8


## gitのコマンドの目次

**1. gitの起動とコミット**

- git init
- git add 
- git commit 
- git status
- git log
- git reset

**2. branchの運用**

- git branch 
- git checkout 
- git merge 

**3.githubとの提携**

- git remote add origin 
- git push origin ブラン
- git fetch origin ブランチ名
- git diff HEAD origin/ブランチ名
- git pull origin ブランチ名

**4.githubの設定**
- git config --global --list
- git config --global 設定
- git config --local　設定


# 1.gitの起動とコミット
ここではローカルリポジトリの起動とコミット等の基本をまとめる。

## ここで使用するコマンド    



#### gitの起動

```
git init
```
#### ファイルをgitのステージング環境に上げる

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

#### 前回のcommitからの変更状態の確認

```
git status
```
#### addの取り消し

```
git reset ファイル名
```
#### ステージング環境の変更をローカルリポジトリに取り入れる

```
git commit -m "コミットメッセージ"
```
#### コミットの履歴を確認

```
git log
```

#### コミットの取り消し

```
git reset id
```


ここではローカルリポジトリにファイルを追加してコミットするところまでを目標とする。

まず、gitで管理するフォルダを作成する。
今回は便宜上git-practiceというフォルダを作成する。

```:ターミナル
mkdir git-practice
cd git-practice
```



git-practice上でファイルを作成する。
今回はnodejsのexpressを使ってgitの操作をなれる。

## 1-1gitの立ち上げ

```:$(pwd)
git init
```

次にexpressなどのnodejsに必要な情報をダウンロードする。

### tips
gitのリポジトリになっているかどうかは

```
shift+command+.
```
![スクリーンショット 2020-10-15 0.53.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/656158/d13620f4-6596-710d-f006-5a33baafa62f.png)


で隠しファイルの確認から確認可能。

gitが起動していれば.gitというフォルダが確認できる。

##1-2 gitのファイルを追加と取り消し

npm init を使ってnodejsを立ち上げる。
すると、package.jsonと言うjsonファイルが追加される。
ここでgitを立ち上げてから前回までの履歴を以下のコマンドで確認する。

```:$(pwd)
git status
```

```
On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)

	package.json

nothing added to commit but untracked files present (use "git add" to track)
```
package.jsonが追加されているのが確認できる。

これをステージングに追加するには以下のコマンドを使う。

```
git add .   #ファイル名のところを.ですべて追加
```

```
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

	new file:   package.json
```
new file:   package.json　というのが現在ステージング環境にいることが確認できる。
git addを取り消すには以下のコマンドを使用する。

```
git rm --cached -r . 初回のファイルを全て取り消し
git rm --cashed -r ファイル名 初回のファイルを取り消し
git reset HEAD 二回目以降のgit addを取り消し
git reset HEAD ファイル名 二回目以降の特定のgit addを取り消し
```

## 1-3　ローカルリポジトリに変更をコミットする
ステージング環境の変更をローカルリポジトリに取り入れるためにはコミットをする必要がある。
コマンドは以下。

```
git commit -m "変更内容等のメッセージ"
```
commit-messageには変更した内容があとから見てわかりやすいものにする。
(例) add packege.json

コミットの履歴は、以下のコマンドで確認が可能。

```
git log
```

コミットの取り消しには以下のコマンドを使用。
commit_idの地点までcommitを戻すことができる。

```
git reset commit_id
```
commit_idは**git log**で確認可能。
commitの後で暗号のようになっているもの。

```:git_log
commit 8b0e6************ ← ここがcommit_id
Author: ******
Date:   *****
```

## 練習問題1
① npm install expressをしてパッケージをダウンロードし、変更内容をコミットする
② ssというからファイルを作成し、addからのreset,commitからのresetをする

#2. branchを使って作業を分岐
ここでは作業内容に応じてブランチを作成するやり方をまとめる。

## ここで使用するコマンド

**ブランチの確認と作成**

```
git branch ブランチ名
```
**ブランチ間の移動**

```
git checkout 移動したいブランチ名
```

**ブランチの取り込み**

```
git merge 取り込みたいブランチ名
```

**リモートリポジトリの変更内容を取得**

```
git fetch origin ブランチ名
```

**リモートリポジトリの変更内容の差分を表示**

```
git diff HEAD origin/ブランチ名
```

## 2-1 ブランチの作成と移動
ブランチの作成は以下のコマンド。

```
git branch ブランチ名
```

ブランチ名にはdevelopやaddfileなど作業内容がわかりやすいものにする。
ブランチ名を指定しないと現在存在するブランチを確認することができる。
ブランチ間を移動するには以下のコマンド。

```
git checkout ブランチ名
```

## 2-2 ブランチの取り込み
例えば、htmlというブランチを作ってmasterブランチにその内容を取り込みたかったら以下のコマンドを使う。

```:masterブランチ内
git merge 取り込みたいブランチ名
```

取り込むブランチ(master)に移動→マージするの手順ですすめる。

## 練習問題2
addというブランチを作成して、適当なファイルを追加後masterブランチに変更内容とを取り込む。


#3.githubと連携する
github上のリポジトリと連携してプロジェクトを進行する方法をまとめる。

## ここで使うコマンド

**リモートリポジトリの追加**

```
git remote add origin githubのリポジトリのurl
```

**ローカルリポジトリの内容をgithubのリポジトリに反映**

```
git push origin ブランチ名
```

## 3-1 リモートリポジトリの追加
githubにgitの練習用のリポジトリとしてgit-practiceというリポジトリを作ったとする。
そのリポジトリのurlが https://practice だったとすると反映は以下のコマンドで行う。
originというのはリモートリポジトリの名前。

```
git remote add origin https://practice
```

## 3-2 ローカルリポジトリのコミット内容をgithubに反映
例えばdevelopブランチでcommitをした内容を加える場合は以下。

```
git push origin develop
```
### tips 
3-3に入る前にローカルブランチがどのブランチに対して適応しているか確認したほうがよい。
方法は以下。

```
git branch -vv
```

## 3-3　リモートリポジトリで行われた変更内容を取り込む
例えば３人で作業しており,AさんがdevelopでREADME.mdに情報を追加したとする。
あなたのローカルリポジトリにはその変更内容はないので確認する必要がある。
確認するためのコマンドは以下。

ローカルのリポジトリ情報を全て更新

```
git fetch
```

リモートの特定のブランチのfetch

```
git fetch origin {ブランチ名}
```

リモートのブランチを獲得できたかを確認

```
git branch -r | grep　{ブランチ名}
```

取り込んだ変更内容を確認するためのコマンドは以下。

```
git diff HEAD origin/develop
```

そして変更内容が良かった場合

```
git pull origin develop
```

git pull = git fetch + git merge

といった感じで情報をリモートからとってきてその情報をマージする役割をしている。

#4.githubの設定
githubのユーザーを複数分けるときの設定方法について記述する。

##4-1 git config --global --list
以下のコマンドでgit configの各種設定を確認することができる。

```
$  git config --global --list

>>>
user.email=githubで設定しているemail
user.name=githubで設定しているusername
merge.ff=false
・
・
```

##4-2  git config --global 設定
`git config --global 設定`とすることでgithubの全てのリポジトリでの設定を変更することが出来る。
例えばusernameとemailの設定を変更したい場合は以下のようになる。

**※user.nameが""でemailが""がないことに注意**

```
git config --global user.name "ユーザーネーム"
git config --global user.email メール・アドレス
```

## 4-3 git config --local 設定
`git config --local 設定`とすることで現在のディレクトリで進行しているリポジトリのみ設定を変更することが出来る。
例えばusernameとemailの設定を変更したい場合は以下のようになる。

```
git config --local user.name "ユーザーネーム"
git config --local user.email  メールアドレス
```


## まとめ
githubでの開発の流れは以下のようになる。

1.ローカルで開発
2.リモートにプッシュ
3.親ブランチにpullリクエスト

1〜3の繰り返しになる。

フローは以下の記事でよくまとめられている。
https://qiita.com/ohnaka0410/items/7c7fa20710dfd72b7d7a