Git のインストールから操作方法までの手順+有効的な使用方法

# はじめに

**本記事は, 基本的にgitはCUI(コマンド)で操作するものとして記載しています．**
また本記事は， Gitのインストールから操作方法までの多岐に渡り記載したいと思いますので， 
`初心者からGitの使い方をちょっと忘れてしまったという人の様々な人の参考になればと思います．`
 ※ 個人的意見もありますので， 注意してください． 

gitのGUI操作については， 本記事に記載していませんので， 注意してください．
参考程度に， 下記にGUIで操作できるツールを2つ記載しておきます．

<GUIで操作できるツールについて>

* [SourceTree](https://www.sourcetreeapp.com/)
* [GitKraken](https://www.gitkraken.com/)


# gitを使用する目的

`基本的に個人および複数人で開発を行うときのソースコードのバージョン管理を行うツールであるという認識`
またgitをうまく使いこなすことで， プロダクトの進捗状況およびIssueを管理することができます．

本記事は, 
**⓪[インストール方法](#⓪ Gitのインストール)， 
①[ソースコードのコミットからプッシュまでの操作方法](#① commitからpushの流れ)
② [Issueの有効的な使い方？](#② Issueでプロジェクトの管理を行う)** 
を記載します．

##⓪ Gitのインストール

まずはgitのインストールができているかを確認してみましょう

```terminal
git --version
# git version 2.21.0
```

この時点でgitをインストールされたことがない人は, `git --version`でエラーが出るかな？？と思います...
**gitをインストールをしたことがない人は下記から始めてください！！！！！**
本記事では， [Homebrew](https://brew.sh/index_ja)を通してgitをダウンロードするので， Homebrewをインストールされていない方は， インストールしてください:pray:

```terminal
brew install git
```

念のためにHomebrewのダウンロード方法については下記に示しますので参考にしてください．

```terminal
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```

上記のコマンドで, gitのダウンロードは完了です！
**念のために, `git --version`してダウンロードできているか確認してください.**

gitのアップデートのみ行いたい人は

```terminal
brew upgrade git
```

ここまでがgitのインストールおよびアップデートについてでした．
引き続き，gitの操作の流れについて記載します．

##① commitからpushの流れ


###1.1 ユーザ設定

Gitではユーザー名とメールアドレスが、コミットのログなどに記録されます．
ユーザー名とメールアドレスを確認するには、以下のコマンドを使用します．

```terminal
git config user.name
# usernameの表示

git config user.email
# 登録しているemailの表示
```

Gitのユーザー名とメールアドレスを，以下のコマンドで設定することができます

```terminal
git config --global user.name "ユーザ名”
git config --global user.email メールアドレス
```
上記での， `--global`オプションは，
ユーザごとの設定を行う ~/.gitconfig ファイルに対して、値を設定することです
``設定しておくことで， 以降のログインは不要です．``

###1.2 リポジトリの作成
**下記では, 自身でプロジェクトを作成する手順について記載します．**

仮に，既にGitのリポジトリが存在し， コードをローカルにコピーしたいときは, 
`git clone {リポジトリURL}`で行うことができます．

#####1.2.1 リポジトリを作成するディレクトリに移動

gitで管理したいフォルダまで移動します．

```terminal
cd ~/使用するプロジェクトのフォルダ
```

#####1.2.2 リポジトリの作成

```terminal
git init
```

###1.3 ローカルリポジトリへのコミット

#####1.3.1 コミット

```terminal
git add .
git commit -m "first commit"
```

`add .`はディレクトリ内の全てのファイルを示します．
仮にファイルを指定してpushしたい場合は， ドットではなくファイル名に変更することで
特定のファイルのみをpushすることができます．

また`commit -m`は， pushする際にメッセージを残すことができます．
現時点でのコードの進捗状況を簡易的に記載しておくとベターだと思います．
例) `git commit -m "fix miss typo"`
-mはなく， `git commit`のみだけでもpushすることができます！！


#####1.3.2 コミット状況確認

```terminal
git log
```

![スクリーンショット 2021-05-14 13.25.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482799/d4c2393f-da0c-c1a0-093a-31c543712eb6.png)
上記の写真のようにプロジェクトのコミット状況を確認することができます.(写真が雑ですみません:persevere:)

```terminal
git log --oneline --graph
```

![スクリーンショット 2021-05-14 13.28.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482799/a186fb9b-5357-3cdd-3ccb-aee8abe74f85.png)
こっちの方が見やすいですね！！

####<間違えてcommitした時の対処>
仮にコミットを間違えてしまった場合の対処方法について
記載しておきます．


#####・ 削除

```terminal
git reset --hard HEAD^
git reset --hard HEAD^^
git reset --hard HEAD^^^
```

>
- １つ前のコミット取り消し
- ２つ前のコミット取り消し
- ３つ前のコミット取り消し

そしてこの状態でリモートへ普通にpushすると，
コミット履歴で不整合が生じてしまっているのでpushできません....
**そのため，リモートのブランチを修正するために強制pushを使用して
ブランチを誤ってpushしてしまう前の状態へ戻しましょう！**

ブランチ名の前に「+」をつけることで強制pushになります.

```terminal
git push origin +master
# 或いは
git push origin +developer
```

#####・ 上書き

```terminal
git commit --amend
```

>
- 直前のコミットに上書きする

###1.4 Githubへのpush

#####・ remoteでのpush

```terminal
git remote add origin {プッシュするURL}
```

#####・ push

```terminal
git push -u origin master
```


###1.5 pushされているかの確認（Github上で）


##② Issueでプロジェクトの管理を行う

リポジトリ内のIssuesタブで，プロジェクトの進捗・タスク管理状況などを行います
![スクリーンショット 2021-05-14 11.11.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482799/e1d911c6-9910-365b-b636-16acc99c238d.png)


###2.1 Issueの作成によるタスク管理状況の確認
Issuesのタブから [New Issue]ボタンを選択することでIssueを作成することができます．

![スクリーンショット 2021-05-14 11.19.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482799/e5b2de5d-b62a-ba2e-b204-f7f5213af0c6.png)

![スクリーンショット 2021-05-14 11.20.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482799/35b157e7-9da1-1535-829b-322a2c2c66ff.png)


上記のように, IssuesタブにIssueが作成されます．
Issuesを用いて進捗・タスク管理を行うことで， 複数の開発者で進捗を管理することができます．
そのため，**リモートワークの現在に，とても有効的な手段です！！！**


#おわりに
本記事は，Gitのインストールからある程度の操作方法までの手順について記載しました．
しかしながらpushまでの流れは個人でgit管理を行う上での操作手順でした．
今後，複数人での開発のためのgit操作について記載したいと思います．(git branchなどの操作)