Git 基礎の理解　



####Udemyの講座を受講したので備忘録としてまとめてみた
[もう怖くないGit！チーム開発で必要なGitを完全マスター](https://www.udemy.com/course/unscared_git/)

##Gitの設定
初期設定
 
```terminal.
% git config --global <内容> //pc全体の設定
% git config --global user.name <名前> //名前の設定
% git config --global user.email <アドレス>//メールアドレスの設定
```
エイリアスを設定し入力コマンドを短縮

```terminal.
% git config --global alias.<新コマンド> commit //commitコマンド設定
% git config --global alias.<新コマンド> status //statusコマンド設定
% git config --global alias.<新コマンド> branch //branchのコマンド設定
% git config --global alias.<新コマンド> checkout //checkoutのコマンド設定
```
##リポジトリ作成

```terminal.
% git init
```
##ブランチ操作コマンド

```terminal.
% git branch  //ブランチの一覧表示
% git branch <ブランチ名>  //ブランチの追加
% git checkout <ブランチ名>  //ブランチの切り替え
% git checkout -d <ブランチ名>  //ブランチを追加して切り替え
% git switch -c <ブランチ名> //ブランチを追加して切り替え
% git branch -m <ブランチ名>　　//<ブランチの名前変更>
% git branch -d <ブランチ名>  //ブランチの削除
% git branch -D <ブランチ名> //ブランチの強制削除
```

##リモートリポジトリ(GitHub)の操作コマンド
```terminal.
% git remote add <github url>  //新規追加
% git remote add origin <github url>  //URLを別名(origin)で新規追加
% git remote  //リモートリポジトリ名の表示
% git remote -v  //リモートリポジトリのURLの表示
% git remote show <リモート名>  //リモートリポジトリの詳細情報を表示
% git remote rename <旧リモート名><新リモート名>　　//リモートリポジトリ名の変更
% git remote rm <リモート名>　　//リモートリポジトリの削除

```
##GitHubにpushするまでの流れ

```terminal.
% git status  //変更内容の確認
% git add <ファイル名>  //変更内容をステージ(index)に追加
% git commit  //変更内容をコミット
% git push <リモート名><ブランチ名>  //変更内容をリモートリポジトリ(GitHub)へ送信
```
##GitHubから取り込む流れ
リモート→ローカル→ワークツリー

```terminal.
% git fetch <リモート名>  //ファイルの取得
% git merge <リモート名><ブランチ名>  //取得したファイルをワークツリーへ統合
```
リモート→ワークツリー

```terminal.
// ※HEADのブランチ確認
% git pull <リモート名><ブランチ名> //リモートから取得してmergeまでを一度に実行
```

##変更差分・履歴の確認

```terminal.
% git diff <ファイル名>  //ステージ(index)に追加前の変更分
% git diff --staged  //ステージ(index)に追加後(commit前)の変更分

% git log  //commit済の変更履歴を確認
% git log -p <ファイル名> //commit済の変更履歴の詳細な差分を確認
% git log -n <コミット数>  //表示するcommit数の指定
```
##変更・取り消し

```terminal.
//  ワークツリー内の変更取り消し
% git checkout --<ファイル名>
% git checkout --<ディレクトリ名>
% git checkout -- .  //ワークツリー内全ての変更の取り消し

//  ステージ(index)に追加した変更の取り消し ※ワークツリーの変更は取り消されない
% git reset HEAD <ファイル名>
% git reset HEAD .  //ステージ(index)に追加した全ての変更の取り消し

//  直前のcommitの変更 ※pushする前のcommit
% git commit --amend
```

##mergeとコンフリクトの解消
####merge
変更内容をリモートリポジトリから自分のブランチに取り込む作業のこと
####コンフリクト
mergeした際に同じ箇所の変更が競合すること
##

```terminal.
% git merge <リモート名>/<ブランチ名>  //リモートリポジトリから変更を取り込む
```
####コンフリクトの解消
① コンフリクトが起きた箇所の内容を書き換える
② 「<<<」 「===」 「>>>」　の記述を削除する

##リベース
変更履歴を一直線に整えて取り込む

```terminal.
% git branch
  master2
* master

% git checkout master2
% git rebase master
% git checkout master
% git merge master2
```
commit履歴の書き換え

```terminal.
% git rebase -i HEAD~<コミット数(3)>

pick a0ca45c github　追記
edit 91f7a7e master2新規作成  //先頭のpickをeditに変更
pick 53118f1 masterを新規作成

% git commit --amend  //変更したい内容を修正後
% git rebase --continue  //次のコミットへ移動　※今回editは１つのみのため終了
```
複数のcommit履歴をまとめる
※squashに指定したcommitと直前のcommitがまとめられる

```terminal.
% git rebase -i HEAD~<コミット数(3)>

pick a0ca45c github　追記
squash 91f7a7e master2新規作成  //先頭のpickをsquashに変更
squash 53118f1 masterを新規作成  //先頭のpickをsquashに変更
```
##タグ
```terminal.
% git tag <タグ名>  //タグの作成
% git tag -a <タグ名> -m <メッセージ>　　//注釈付きタグの作成
% git tag <タグ名><コミット名>　　//過去のcommitにタグを作成

% git show <タグ名>  //タグのデータを表示
% git push <リモート名><タグ名>　　//タグをリモートリポジトリに送信
% git push < リモート名>　--tags  //タグを一斉にリモートリポジトリに送信
```

##stash
作業の一時避難

```terminal.
% git stash  //作業を一時避難

% git stash list  //避難した作業の確認

% git stash apply  //避難した作業の復元
% git stash apply --index  //ステージ(index)の状況も復元

% git stash drop  //避難した最新の作業を削除
% git stash drop <スタッシュ名>　　//避難した特定の作業を削除
% git stash clear  //避難した全ての作業を削除
```

##まとめ
下記の講座ではより分かりやすく図解で表現されています。
基礎の基礎を理解できるためおすすめです。

[もう怖くないGit！チーム開発で必要なGitを完全マスター](https://www.udemy.com/course/unscared_git/)