Udemy『もう怖くないGit！チーム開発で必要なGitを完全マスター』学習メモ

#Udemy『もう怖くないGit！チーム開発で必要なGitを完全マスター』学習メモ

※開発で必要になったgitコマンドをだいぶ追記してしまっているので、本講座にない内容も結構あります。念のため。

#ローカルリポジトリの新規作成(.gitディレクトリが作成される)
git init

#Gitの設定を確認する
git config --list

#GitHub上にあるプロジェクトから始める場合
git clone (リポジトリ名。GitHubよりURLをコピペする)

#変更をステージに追加する
git add (ファイル名orディレクトリ名)
git add .
↑全て追加される場合

#変更状況を確認する(リポジトリ←→ステージ間、ステージ←→ワークツリー間で変更されたファイルを確認する)
git status

#変更をコミットする
git commit
atomの場合コミットメッセージタブが立ち上がるので、コメント入力後command+Sで保存してXマークでタブを閉じるとコミットが完了する。

#変更差分を確認する
git addする前の変更分
git diff
git diff (ファイル名)

git addした後の変更分
git diff --staged


#変更履歴を確認する
git log

一行で表示する
git log --oneline

ファイルの変更差分を表示する
git log -p (ファイル名)

表示するコミット数を指定する
git log -n(コミット数)


#ファイルの削除を記録する
git rm (ファイル名)
git rm -r(ディレクトリ名)

ファイルを残したいとき(リポジトリからのみ削除したい)
git rm --cached

#ファイルの移動を記録する
git mv (旧ファイル)(新ファイル)

以下のコマンドと同じ
mv(旧ファイル)(新ファイル)
git rm (旧ファイル)
git add (新ファイル)

#リモートリポジトリを新規追加する
git remote add origin (GitHubのURL)

#リモートリポジトリの設定を変更する
他人のリポジトリからプルしてきた場合等は下記コマンドで紐付けを削除し、上のコマンドで再設定する。
git remote rm origin

#リモートリポジトリへ送信する
git push (リモート名)(ブランチ名)
git push -u origin master
(初回以降はgit push origin masterのみでOK)

#コマンドにエイリアスを付ける
***(globalオプションを付けるとPC全体の設定になる)***
git config --global alias.ci commit
git config --global alias.st status
git config --global alias.br branch
git config --global alias.co checkout

#gitignoreファイルの編集
ファイル新規作成し、プロジェクトファイル下の「.gitignore」ファイルを作成。
・シャープから始まる行はコメント
・ルートディレクトリを指定
/root.html
・ディレクトリ以下を除外
dir/
・/以外の文字列にマッチ「*」
/*/*.css

#ファイルへの変更を取り消す
・git checkout (ファイル名orディレクトリ名)
・全変更を取り消す
git checkout -- .

#ステージに追加した変更を取り消す
git reset HEAD (ファイル名orディレクトリ名)
・全変更を取り消す
git reser HEAD .
**ステージに追加した変更を取り消すだけで、ワークツリーの変更は取り消されていないので注意。**

#直前のコミットをやり直す
git commit --amend
**(リモートリポジトリにプッシュしたファイルは取り消してはいけない！その場合、再度コミット・プッシュすること！)**

#特定のコミットの状態に戻す
git checkout -b (ブランチ名) (コミットのハッシュ値)
###※別記事より。上記のように本講座ではリモートリポジトリの操作は推奨されていない。このコマンドの運用が現実的かどうか質問してみる。###

#リモートを表示する
リポジトリ名のみ：git remote
URLを表示：git remote -v

#リモートから情報を取得する(フェッチ)
git fetch (リモート名)
git fetch origin

#リモートリポジトリとローカルリポジトリのマスターブランチを同じ状態にする
git branch -D master :ローカルのmasterブランチを削除
git fetch
git branch master origin/master

#ローカルツリーを以前の状態に戻す
git reset --hard HEAD ：最新のコミットまで戻す
git reset --hard (コミットのハッシュ値)：該当のコミットまで戻す

#リモートから情報を取得する(プル)
git pull (リモート名)(ブランチ名)
git pull origin master
git pull のみに省略可能

下記コマンドと同じ
git fetch origin master
git merge origin/master

#リモートの詳細情報を表示する(git remoteコマンドよりも詳しい情報を表示する)
git remote show (リモート名)
git remote show origin

#リモート名を変更・削除する
git remote rename (旧リモート名)(新リモート名)
git remote rm (リモート名)

#ブランチを新規追加する
git branch (ブランチ名)

#ブランチ一覧を表示する
・git branch
リモートリポジトリ含めて全てのブランチを表示する
・git branch -a

#ブランチを切り替える
git checkout (ブランチ名)

ブランチを新規作成して切り替える
git checkout -b (ブランチ名)

#変更履歴をマージする
git merge (ブランチ名)
git merge (リモート名/ブランチ名)
例：git merge origin/master

Fast Foward：早送りになるマージ（ブランチを前に進めるだけのマージ）
Auto Merge：基本的なマージ（変更を統合するマージ）

#現在のブランチの名前を変更する
git branch -m (ブランチ名)

#ブランチを削除する
git branch -d (ブランチ名)
強制削除する場合
git branch -D (ブランチ名)

#プルリクエストの流れ
新しいブランチを作成する
(変更を加える)
コミット、プッシュする
GitHubでプルリクエストを作成
Reviewersを選択
(レビュワー側)Files chenged等をレビューしてコメントを付けるか、approve(承認)
承認されたらマージし、最初に作成した新しいブランチを削除する
ワークツリーにリモートからプルし、こちらでも最初に作成した新しいブランチを削除する

#GitHub Flow
・masterブランチは常にデプロイできる状態に保つ
・新開発はmasterブランチから新しいブランチを作成してスタート
・定期的にpushする
・masterにマージするためにプルリクエストを行う
・必ずレビューを受ける
・masterブランチにマージしたらすぐにデプロイする
←テストとデプロイ作業は自動化

#リベースで履歴を整えた形で変更を結合する
git rebase (ブランチ名)
***
GitHubにプッシュしたコミットをリベースしてはならない。git push -f(強制上書きプッシュ)は絶対NG
・プッシュしていないローカルの変更にはリベースを使い、プッシュした後マージを使おう。コンフリクトしそうならマージを使おう。
***

#リベース型のプル
git pull --rebase (リモート名)(ブランチ名)

#リベースで複数の履歴を書き換える
git rebase -i (コミットID)
例：git rebase -I (HEAD~3)
（コミットメッセージが立ち上がる）やり直したいコミットをeditにする
git commit --amend で修正
git rebase --continue で次のコミットに行く

#コミットを並び替える
git rebase -i HEAD~3

#タグの一覧を表示する
git tag

#タグ付けする(基本的にリリースポイントに付ける)
git tag -a (タグ名) -m "(メッセージ)"
例：git tag -a "20200310" -m "version 20200310_1"

#後からタグ付けする
git tag (タグ名)(コミット名)
git tag 20200310 8a6cbc4

#タグのデータを表示する
git show (タグ名)
git show 20200310

#タグをリモートリポジトリに送信する
git push (リモート名)(タグ名)
git push origin 20200310

#タグを一斉に送信する
git push origin --tags

#作業を一時避難する
git stash

#避難した作業を確認する
git stash list

#避難した作業を復元する
git stash apply
ステージの状況も復元する
git stash apply --index
特定の作業を復元する
git stash apply (スタッシュ名)
git stash apply stash@[1]

#避難した作業を削除する
git stash drop
特定の作業を削除する
git stash drop (スタッシュ名)
git stash drop stash@[1]
全作業を削除する
git stash clear