開発未経験が書く　ドットインストール「git入門」まとめ

<h1>この記事について</h1>
<p>この記事は、開発未経験の人間がインプットした内容が書かれています。</p>
<p>実際に開発経験を積まないと身につかない、かといって疎かにしたら後々痛い目にあう、といったジレンマを少しでも解消するために、「頭の中を言語化し、解釈違いを指摘してもらう」という目的で投稿します。</p>
<p>気になる点がありましたらツッコミをいただけると嬉しいです。</p>

<h1>記事の内容</h1>
<p>ドットインストール「git入門」のまとめ</p>

<h1>インプット教材</h1>
ドットインストール「git入門」: https://dotinstall.com/lessons/basic_git
<h1>開発環境</h1>

```
git version 2.21.0
```

<h2>gitとは</h2>
<p>gitは開発しているもののバージョン管理を簡単にできるツールのこと。</p>
<p>作業ディレクトリで開発し、ステージングエリアへ一旦保存し、問題がなければリポジトリに入れる。</p>
<p>リポジトリにはローカル、リモートで分けられ、ドットインストールではローカル環境で解説している。</p>
<h3>gitを使用する前準備</h3>
<p>ユーザー名とE-mailを登録</p>
```
git config --global user.name "user name"
git config --global user.email "email address"
```
<p>出力されるコードの色分け機能をONにする。</p>
```
git config --global color.ui true
```
<p>gitの設定内容を一覧表示で確認</p>
```
git config -l
```
<p>gitのヘルプを表示。qキーで解除</p>
```
git config --help
```
<h3>gitの作成〜コミットまでの簡単な流れ</h3>
例）　作業ディレクトリ`myweb`にgitを作成。ファイル`index.html`を作成しコミットする。
作業ディレクトリに移動

```
cd ~/myweb/
```

<p>gitの初期化</p>
```
git init
```
<p>ファイルの中身を見る</p>
```
cat index.html
```
<p>作業が完了したら、ステージングエリアへ保存する</p>
```
git add index.html
```
<p>ステージングエリアからリポジトリに送る（コミットする）。実行するとコミットメッセージを記載するように要求されるので更新内容がわかるように書く(created index.htmlなど)</p>
```
git commit
```
コミットメッセージが一行で良い場合は、commitの後に`-m`を入れると、コミットの実行とメッセージの記載を一度に実行できる

```
git commit -m "created index.html"
```

`-m`ではなく`-am`にすると、addも含めて一度に実行できる

```
git commit -am "created index.html"
```

<h3>ログの操作</h3>
コミットした履歴がログとして管理されている。ログの内容を確認したり、呼び出したりすることができる</br>
コミットしたファイルに少し変更を加えたい場合、大きな変更でない（ログに残す必要性がない）ものであれば、コミット時に後ろに`--amend`を入れると、直前のログとしてコミットできる

```
git commit --amend
```

gitの更新内容を一覧表示

```
git log
```

ログのIDとコミットメッセージのみ表示する。

```
git log --oneline
```

変更内容を表示

```
git log -p
```

変更箇所を表示。変更されたファイル名と変更箇所の個数が表示される。

```
git log --stat
```

過去のログの状態に戻す

```
git reset --hard HEAD
```

HEADにすると直前のログに戻る。特定のログに戻りたいときはコミットIDを他のIDと重複しない長さまで入れる

```
git reset --hard 5d5a54as5f
```

<p>ログ移動前の直前のログはORIG_HEADに格納されているので呼び出すことができる</p>
```
git reset --hard ORIG_HEAD
```
<p>直前のコミットに任意のタグをつける</p>
```
git tag v1.0
```
<p>任意のコミットにタグをつけるにはタグ名の後ろにコミットIDを入れる</p>
```
git tag v0.9 er524dfggrt
```
<p>タグの一覧表示</p>
```
git tag
```
<p>タグのついたコミットの内容を確認</p>
```
git show v0.9
```
<p>タグを消す</p>
```
git tag -d v0.9
```

<p>作業したファイルの状態を確認。現在の状態に対してどんなアクションができるかを教えてくれる。</p>
```
git status
```
<p>作業したファイルを取り消す</p>
```
git checkout -- index.html
```
<p>作業したファイルの状態と内容を表示</p>
```
git diff
```

`git diff`はステージングエリアに送る前のファイルの変更内容が表示される。ステージングエリアに送ってしまったファイルを確認したい時は、後ろに`--cached`を入れる

```
git diff --cached
```
<p>今いるファイルから下のファイルを全てaddする</p> 
```
git add .
```

commitしたファイルなど、一度gitを使ったファイルはgitの管理下にあるのでそのファイルを操作（`rm`, `mv`など）するとエラーとなる。コマンドの前にgitを入れることでgitの管理下にあるファイルを操作できるようになる。</br>
gitの操作したくないファイルがあるとき（共有したくないファイルがある時など）は、`.gitignore`という名前のファイルを作成し、その中にファイル名を記述することで対象外となる。ファイル名をワイルドカードにすれば拡張子で指定できる。

```
*.log 
```

<p>log拡張子のファイルを全て除外</p>
<h3>branch（ブランチ）</h3> 
<p>作業ルート。デフォルトではmasterという名前のブランチで作業している。ブランチが複数ある場合、今いるブランチで作業したものは他のブランチでは反映されない。</p>
<p>ブランチの新規作成</p>
```
git branch hoge
```
<p>ブランチの一覧表示</p>
```
git branch
```
<p>ブランチの移動</p>
```
git checkout hoge
```
<p>ブランチを新規作成し移動する</p>
```
git checkout -b hoge
```
<p>ブランチの削除</p>
```
git branch -d hoge
```
<h3>marge(マージ)</h3>
二つの内容を混ぜること。他のブランチの内容を、今いるブランチに混ぜることができる。他のブランチのファイルを適用したいときに役立つ。

```terminal
git marge hoge
```


<p>マージ元とマージ先の同名のファイルの中身が違う場合はエラー(conflict:衝突)となる。問題のファイルの中身を修正しコミットすることで解決できる。</p>

<h3>alias(エイリアス)</h3>
短縮名。よく使うコマンドを短縮名で登録できる。</br>
例）　`checkout`を短縮名`co`に設定

```
git config --global alias.co checkout
```

短縮名を忘れたときは、`git config -l`で登録の内容を確認できる

<h3>共有リポジトリ</h3>
<p>複数人で作業するときは各人が作業したファイルを一つのリポジトリで管理するのが一般的。</p>
<p>ドットインストールでは解説を簡略化するため、一人のユーザーが2つのディレクトリを操作することで2人の作業者と見立てている。</p>
<p>例）　共有リポジトリ用のディレクトリ名: ourweb.git</p>
<p>ディレクトリに共有リポジトリを作成</p>

```
git init --bare
```

<h3>ディレクトリのコミットを共有（プッシュ）</h3>
作業ディレクトリに共有リポジトリを登録する

```　
git remote add origin ~/ourweb.git
```

登録するときの名前（上記ではorigin）は任意で良い。登録したリポジトリの場所は`git config -l`で確認できる

登録を解除

```
git remote rm origin(登録した名前)
```

共有リポジトリにコミットをプッシュ。`git push`の後に登録名とブランチ名を指定

```
git push origin master
```

共有リポジトリの内容を作業ディレクトリに送り、マージする（プル）

```
git pull origin master
```

あるファイルについて、別の作業者がすでに変更しプッシュをした後にこちらもプッシュした場合、ファイルの中身が違うとエラーとなる。その場合は先にプルしてからファイルを修正する。

<h3>クローン作成</h3>
ディレクトリのクローンを作成したいときは、`git clone`の後ろにクローンしたいディレクトリとディレクトリ名を入れる。ディレクトリの「中身」を複製したいのでディレクトリ名の後ろに`/`を忘れない

```
git clone ~/ourweb.git/ myweb2
```

クローンには共有リポジトリの登録も引き継いでいるので登録不要