Udemy もう怖くないGit!チーム開発で必要なGitを完全マスター　(基礎編)

>引用先
>[Udemy もう怖くないGit!チーム開発で必要なGitを完全マスター](https://www.udemy.com/course/unscared_git/)
>このコースではGitの裏側でどのような挙動でGitが動いているのかを図で詳しく解説しているので深く知りたい方は受講してみることをおすすめします。

#Gitとは
Gitとは、分散型バージョン管理システムのこと。
簡単にいうとファイルのバージョン管理ができるツールのこと。
ファイルの変更履歴が管理できるので、前のバージョンに戻したいときにすぐに戻すことができます。

#GitHubとは
コードのホスティングサービス。
ファイルの変更履歴をオンライン上で扱えるサービスのこと。
Gitで扱うデータをオンラインでわかりやすくしています。


#Gitにユーザー情報を登録

```
git config --global user.name <githubで登録したユーザーネーム>
git config --global user.email <githubで登録したメールアドレス>
git config --global core.editor <エディタ名>
```
```
git config user.name
# <githubで登録したユーザーネーム>

git config user.email
# <githubで登録したメールアドレス>

git config core.editor
# <エディタ名>

git config --list
# 登録された情報がリスト上で確認できる
```

#基本的なGitの流れ

ワークツリー(自分のパソコンの作業場)
↓　git add
ステージ(リポジトリにコミットする前の準備エリア)
↓　git commit
ローカルリポジトリ(自分のパソコン内でファイルやディレクトリの履歴を管理する場所)
↓　git push
リモートリポジトリ(サーバー上のファイルやディレクトリの履歴を管理する場所)

#ローカルリポジトリを作成

```
git init
```
git initをすると.gitディレクトリ(ローカルリポジトリ)が作成される。

#Gitリポジトリのコピーを作成する

```
git clone <リポジトリ名>
```
ローカル内にファイルと.gitディレクトリのコピーを作成する。

#変更をステージに追加する
```
git add <ファイル名>
git add <ディレクトリ名>
git add .
```
ファイル名、ディレクトリ名を指定して追加できる。
ワークツリー内全てのファイルを追加したい時はgit add . と入力する。

#変更を記録する
```
git commit
git commit -m "<コミット名>"
```
ステージからリポジトリへ記録する。
コミットメッセージはわかりやすく書く。

#現在の変更状況を確認する
```
git status
```
ワークツリーとステージ間、ステージとリポジトリ間の変更されたファイルを表示する。

#変更差分を確認する
```
# git addする前
git diff
git diff <ファイル名>

# git addした後
git diff --staged
```
ワークツリーとステージ間がgit diff
ステージとリポジトリ間がgit diff --staged
変更された差分を表示する。

#変更履歴を確認する

```
git log

#一行で表示する
git log --online

#ファイルの変更差分を表示する
git log -p <ファイル名>

#表示するコミット数を制限する
git log -n <コミット数>
```
#ファイルを削除する
```
#ファイルごと削除
git rm <ファイル名>
git rm -r <ディレクトリ名>

#ファイルを残したい時
git rm --cashed <ファイル名>
```
ワークツリーとリポジトリを削除 → git rm
リポジトリのみ削除 → git rm --cashed

#ファイルの移動を記録する
```
git mv <旧ファイル><新ファイル>
```
ファイルの移動、ファイル名の変更を記録できる。

#リモートリポジトリ(GitHub)を新規追加する
```
git remote add origin <リポジトリのURL>
```
originとはリポジトリのURLのショートカット名。
originを登録しておくことで、毎回リポジトリのURLを入力しなくてすむようになります。

#リモートリポジトリ(GitHub)へ送信する
```
git push <リモート名>　<ブランチ名>
git push origin master
#初回にやっておくと良いこと
git push -u origin master
```
git commitした内容を、git pushでリモートリポジトリ(GitHub)へ送信する。

初回にgit push -u origin masterと入力することで
今後git pushのみだけでgit push origin masterと同じ意味になる。

#コマンドにエイリアスを付ける
```
git config --global alias.ci commit
git config --global alias.st status
git config --global alias.br branch
git config --global alias.co checkout
```
コマンドを簡略化できる。

#ファイルの変更を取り消す
```
git checkout --<ファイル名>
git checkout --<ディレクトリ名>

# 全変更を取り消す
git checkout --.
```
ワークツリーで変更したファイルの変更を取り消す。

#ステージした変更を取り消す
```
git reset HEAD <ファイル名>
git reset HEAD <ディレクトリ名>

# 全変更を取り消す
git reset HEAD .
```
ステージしたファイルのみを変更する。
ワークツリーのファイルは変わらない。

#直前のコミットを修正する
```
git commit --amend
```
コミットしてプッシュする前にしか使用できない。
リモートリポジトリにプッシュしたコミットは修正すると
他の人がプルした内容と差異が生まれてしまうため。

#リモートを表示する
```
git remote

#対応するURLを表示
git remote -v
```
前述のoriginなどのショートカット名が表示される。

#リモートから情報を所得する(fetch,pull)

###fetch編
```
git fetch <リモート名>
git fetch origin
```
リモートリポジトリからローカルリポジトリへ情報を保存。
リモート専用のフォルダに保存している。
mergeをしないとワークツリーに保存できない。

###pull編
```
git pull <リモート名>　<ブランチ名>
git pull origin master

#上記コマンドは省略可能
git pull
```
リモートからマージまでを一気にやりたい時に使う。

###fetchとpullの使い分け
基本的にfetchを使うのがおすすめ。
pullをしてしまうとマスターブランチにファイルが統合されてしまうため気をつけなければならない。

#リモートの詳細情報を表示する
```
git remote show <リモート名>
git remote show origin
```
git remoteより詳しい情報が表示できる。
・fetch,pushのURL
・リモートブランチ
・git pillの挙動
・git pushの挙動

#リモート名の変更
```
git remote rename <旧リモート名>　<真リモート名>
```

#リモートの削除
```
git remote rm <リモート名>
```