UNIX・Git 基本コマンド 

#この記事について
初学者による、UNIX・Git基本コマンドのメモです。
Ruby on Rails チュートリアル学習前の整理です。

* [【Progate】Command Line学習コース](https://prog-8.com/languages/commandline)
* [【Udemy】 Git：はじめてのGitとGitHub](https://www.udemy.com/course/intro_git/)

#UNIX基本コマンド
###ファイルの作成

```terminal
touch ファイル名
```

###ファイルの中身を表示する

```terminal
cat ファイル名
```

###ディレクトリを作成

```terminal
mkdir ディレクトリ名
```

###作業ディレクトリの移動

```terminal
cd ディレクトリ名

# 1つ親のディレクトリに移動
cd ..

# ホームディレクトリに移動
cd
```

###カレントディレクトリの確認

```terminal
pwd
```

###ディレクトリの中身を表示

```terminal
ls

# 隠しファイルを含めたディレクトリの全中身を表示
ls -a
```

###ファイル・ディレクトリの移動

```terminal
# ファイルを移動
mv 移動させたいファイル名 移動先のディレクトリ名

# ディレクトリごと移動
mv 移動させたいディレクトリ名 移動先のディレクトリ名
```

###名称を変更

```terminal
# ファイル名を変更
mv 現在のファイル名 新しいファイル名

# ディレクトリ名を変更
mv 現在のディレクトリ名 新しいディレクトリ名
```

###コピー

```terminal
# ファイルコピー
cp コピーするファイル名 新しいファイル名

# ディレクトリコピー
cp -r コピーするディレクトリ名 新しいディレクトリ名
```

###削除

```terminal
# ファイルの削除
rm 削除するファイル名

# ディレクトリの削除
rm -r 削除するディレクトリ名
```

# Git基本コマンド

###共同開発の流れ
| Step | 作業 | 命令 | コード場所 |
|:-:|:-:|:-:|:-:|
| 1 | コードを変更 | git add | 　ステージングエリアへ 　|
| 2 | 共有準備 | git commit | 　ローカルリポジトリへ 　|
| 3 | 共有 | git push | 　リモートリポジトリへ 　|

【Gitで大事なこと】
共同開発では自分が行った変更を把握し
相手に共有すべき部分を選択できるようになることが大事


###Gitの準備：ローカルリポジトリの新規作成

```terminal
git init
initialize = 初期化
```

**リポジトリ**
ファイルやディレクトリの状態、変更履歴を記録する場所
"git init"コマンドでリポジトリを新規作成(gitディレクトリが作成される) 
この中にファイルやファイルの変更履歴の情報が溜められていく



###共有するファイルを選択

```terminal
git add ファイル名

# 共有する全てのファイルを選択する
git add .
```

###選択したファイルを記録する：コミットする

```terminal
git commit
git commit -m "コミットメッセージ"
```

変更にメッセージに付けてリポジトリに記録するのがコミット
コミットすることで変更がリポジトリ内に時系列で記録される
ひとつの作業ごとに1コミット
（どの作業を何のためにしたのか、すぐ振り返られるようにしておく）

**コミットメッセージ**
ほかのメンバーが「何をどうして変更したのか」
分かりやすいメッセージを付ける

一行目：変更内容の要約（端的にわかりやすく）
二行目：空行
三行目：変更した理由

###コミットしてしまったファイルを管理から外す

```terminal
# ファイルごとGitの管理から削除
git rm ファイル名

# ディレクトリも一緒に削除
git rm -r [ディレクトリ名]

# ファイルは残す場合(gitignoreにも追記)
git rm --cached [ファイル名]
```

###共有の仕組み
「リモート」という共有ファイルの置き場を使う
リモートにファイルをアップロードしたり
リモートからファイルをダウンロードすることで
開発者同士がファイルを共有することができる仕組み

###リモート(GitHub)に登録する
リモートにアップロードするにはリモートのURLを登録する
リモートを登録する際には名前を付ける必要がる
一般的には「origin」とすることが多い

```terminal
git remote add リモート名(origin) URL
# 「origin」という名前で登録される
```

###リモートにファイルをアップロードする：プッシュする

```terminal
git push origin master
# 「origin」は「git remote add」の時に付けたリモート名
```

###リモートのファイルをダウンロードする：プルする

```terminal
git pull gorigin master
```


###変更したファイルを把握する

```terminal
git status
# 変更があったファイルは「赤色」で表示される
```

###変更内容を把握する：ローカルとステージの変更差分
ファイルの変更差分を表示する
add,commmitする前に確認するために利用
変更したものに本当に間違いがないかを確認して変更をcommit


```terminal
git diff
# 追加されたコードが「緑」で表示
# 変更されたコードは、変更前「赤」、変更後「緑」で表示

git diff --staged
# テージとコミットの変更差分

git diff HEAD
# ローカルとステージ、ステージとコミット両方の変更差分
```

###addしたファイルを確認する

```terminal
git status
# addされたファイル　「緑」
# addされていないファイル　「赤」
```

### コミット履歴を表示する

```terminal
git log
# リポジトリにコミットされたログを確認
```

**logオプション**

```terminal
git log --oneline      # 一行で表示する
git log -p             # ファイルの変更差分を表示す
git log -n 3           # 最新のログを3件のみ表示する
git log --oneline -n 3 # 組み合わせも可能
```

###管理しないファイルをGitの管理から外す
**gitignore**
gitignoreに指定することでGitの管理から外すことができる

- 自動生成されるファイル(metaデータ)
- パスワードなどセキュリティ上、共有したくないファイル
　等々

gitignoreファイルの書き方
- #から始まるコメント
- ファイル名
- ディレクトリ
- ファイルの種類