はじめに
筆者は、未経験からWeb系エンジニアになって2ヶ月目の人間だ。Gitの理解に非常に苦しんだので、自分自身のため、またこれから同じ思いをするかもしれない方々のために、これを読めばGit操作に困らない記事を作成した。
対象レベル
- これからエンジニア転職を考えている方
- 駆け出しエンジニアの方
- もう一度、基礎的なところを学びたい方
- 何となく読んでみたいという方
※PCはMac推奨
記事内容
- Gitの基本的な操作(add, commit, push, pull, merge, clone等)
- Gitの応用的な操作(rebase, diff, stash)
Gitとは?
バージョン管理システムの一つで「誰が、いつ、何を」変更したのかを管理する
バージョン管理が必要な理由
・変更履歴を辿れる
・差分確認ができる
・最新のファイルがわかる
・前のバージョンに戻せる
・他人の作業箇所がわかる
・他人の作業を結合できる
用語解説
-
リポジトリ
- リモートリポジトリ:GitHubで例えるなら、GitHub上に存在するプロジェクトの全てのファイルのこと(画像の上の方)
- ローカルリポジトリ:自分のパソコン・マシンに存在するプロジェクトの全てのファイルのこと(画像の下の方)
-
コミット
-
Working directory(Working tree等といくつかの呼び方がある)
- 自分が作業しているディレクトリ
-
Staging area(Indexと呼び方がある)
- コミットする前のWorking derectoryから追加する場所
コミットの流れ
-
Working directoryで変更→Staging areaに追加→コミットとこれを繰り返す
- ほとんどはチーム開発なので、複数の機能を平行で開発する場合、状態を分けることができる
- その状態を分けることを「ブランチ切る」を言ったりする
- ブランチを切ると上記の画像のように、メインのブランチ(青)から枝分かれ(緑・赤)して、それぞれが変更でき、メインのブランチへ変更を結合するイメージ
基本のワークフロー手順
-
リモートリポジトリをコピー(既存のリポジトリをローカル環境に複製すること)
※privateリポジトリを保存したい場合or別名で保存したい場合orカレントディレクトリ以外に保存したい場合は、コマンドが変わるgit clone <リポジトリパス>
-
featureブランチを作成と同時にそのブランチに切り替える
git checkout -b '<ブランチ名>'
-
ファイルを更新しコミット
例えばREADME.mdを編集済の場合git add README.md //作業内容がWorking directoryからStaging areaに追加
※
git add .
: 実際の業務では、カレントディレクトリ配下の全てのファイル、フォルダをStaging areaに追加される上記コマンドを使われることが多いgit commit -m '<XXXXXXXXXX>'
- 'xx'の部分には、なるべく簡潔にどういう変更したかわかるようメッセージを入れる
- コミット後には、コミットポイントが作成される
-
コミットの履歴を確認
git log
- 下の画像がコミット履歴
- 新しいコミットが上に表示される
- 矢印の部分が、コミットID
-
ローカルリポジトリをリモートリポジトリにpushして反映する
- pushする前に、自分が作業している間にリモートリポジトリの内容が更新されている場合があるため、pullする
git pull origin master
- pullができたらリモートリポジトリの最新の内容が反映されるので、次はpushする
git push origin master
-
featureブランチをmasterブランチ(mainブランチの場合もある)にmergeする
- masterブランチへのmergeは、コマンドでも出来るが、実際の業務では、Githubを例に出すとプルリクエストを作成して他人に確認してもらった上で、他人がmergeすることがほとんど
- 下の画像がmergeボタン
- masterブランチへのmergeは、コマンドでも出来るが、実際の業務では、Githubを例に出すとプルリクエストを作成して他人に確認してもらった上で、他人がmergeすることがほとんど
-
リモートリポジトリをローカルリポジトリにpullして反映する
- featureブランチからmasterブランチに切り替える
git pull origin master
- これで、無事に変更した内容がリモートリポジトリのmasterブランチとローカルリポジトリのmasterブランチにも反映した
-
最後はfeatureブランチを削除する
- 上記の一連の流れを完了すると、featureブランチは不要になるため、リモートとローカルのfeatureブランチを削除する
- ブランチを確認
git branch
- featureブランチがあることを確認し、削除する
git branch -d <ブランチ名>
※リモートリポジトリのブランチは、GithubのWebサイトから削除する
基本操作
-
forkする:リモートリポジトリを自分のリモートリポジトリにコピーする
-
trackファイルとuntrackファイルを理解する
- trackファイルは一度でもgitコマンドを使用している(untrackファイルはその逆)
- trackファイルは一覧表示ができる
git ls-files
- trackファイルは一度でもgitコマンドを使用している(untrackファイルはその逆)
-
unstagedのやり方(例えば、Staging areaの内容をWorking directoryに戻す)
git restore --staged <ファイル名>
※このコマンドは
git status
をすると確認ができるので、覚える必要はない
-
Working directoryの作業内容を破棄する
git checkout --<ファイル名>
※このコマンドは
git status
をすると確認ができるので、覚える必要はない
-
ファイル名変更をgitで管理する
git mv <旧ファイル名> <新ファイル名>
-
ファイル削除をgitで管理する
git rm <ファイル名>
※Staging areaの作業内容のあるファイル削除は不可
※trackされていないファイルの削除は不可
-
コミット履歴を表示する
git log
- オプション
- --oneline:各コミットを一行で表示する
- --graph:各コミットを線で結ぶ
- --<ファイル名>:ファイルの情報を表示する
- オプション
-
特定のコミット情報を表示する
git show <コミットID>
-
ブランチのマージ
- マージ:ブランチでの作業は最終的には、メインのmasterブランチや、枝分かれしたブランチに結合させるのがほとんど
- ローカルリポジトリでマージする
※上記で説明したが、基本的にはマージはローカルリポジトリでは行わず、リモートリポジトリでマージする
git merge <ブランチ名>
diffの使い方
- Working directoryとStaging areaの差分の見方
git diff
- Working directoryとローカルリポジトリの差分の見方
git diff HEAD
- Staging areaとローカルリポジトリの差分の見方
※コミット前の差分を見たいときに使うことが多いgit diff --staged HEAD
- 指定したファイルの差分の見方
git diff -- <ファイル名>
- 指定したコミット同士の差分の見方
※使い方は大体、左が古いIDで、右が新しいIDを指定する
※最新のコミットポイントにはHEADを指定すれば良いgit diff <コミットID> <コミットID>
- HEAD^:HEADの親コミット
- HEAD^^:HEADの親の親のコミット
- ブランチ同士の差分の見方
※使い方は大体、左が古いブランチ名で、右が新しいブランチ名を指定するgit diff <ブランチ名> <ブランチ名>
- rebaseの使い方
※不要なマージコミットを作らないため、コミット履歴がスッキリする
※既存のコミットを削除して、新たなコミットを作るので注意が必要git rebase
- pull時にmergeではなく、rebaseをする
git pull --rebase origin master
- rabaseを理解するためにはこの説明では足りないので、他人の力を借りることにします※参考になった記事が以下
git rebaseの具体的なメリット
- rabaseを理解するためにはこの説明では足りないので、他人の力を借りることにします※参考になった記事が以下
-
stashの使い方
※Wording directoryとStaging areaの作業内容を一時避難させる
※実際の業務では、緊急で作業が必要になった時、今の作業をstashするして、別の作業したりする- stashする
git stash
- stashした内容を一覧表示する
git stash list
- stashした内容をWorking directoryに戻す
※作業内容がWorking directoryに戻るが、stashにも残る
git stash apply
※作業内容がWorking directoryに戻り、stashにも残らないgit stash pop
- 作業内容をstashから消す
※popを使用すると、下記の作業は不要git stash drop
- untrackファイルの作業内容も含めてstashする
※これで、trackファイルとuntrackファイルのどちらもstashされる
git stash -u
- 特定のstashファイルの内容を確認する
※<>の中は
git stash show stash@<X>
git stash list
した際の数字を入れる - gitignoreされているファイルの作業内容も含めてstashする
git stash -a
- メッセージをつけてstashする
git stash save "<メッセージ>"
※stashされた件数が多い場合、数字だけではわかりにくいため、メッセージをつけてstashができる
- stashする
まとめ
見るだけでは、理解できないことも多いため、是非、ここで紹介したコマンドを実際に自分のPCで試して欲しい。また、何か要望や指摘があれば、修正するのでコメントしていただければと思う。
この記事を読んで、gitの理解が深まってくれたら嬉しく思います♡最後まで読んでいただきましてありがとうございました。
以上