Webフロントエンドエンジニアの私が普段業務で使っているGitコマンド
はじめに
Webフロントエンドエンジニアとして業務をしていて、普段使用しているGitコマンドをまとめてみました。どなたかの参考になれば幸いです。
また、この記事は、「これだけ抑えておけば良い。」というものではなく、あくまで私の業務環境に依存しているものになります。現場によってはここに載っていないコマンドを使わなければならない場面もあるかと思いますので、ご了承ください。
毎日のように使うコマンド
git add
作業ディレクトリ
にあるファイル群をステージングエリア
に移動するためのコマンドです。
git commit
git add
でステージングエリアに移動したファイル群をローカルリポジトリにさらに移動するコマンドです。
最初なぜgit add
とgit commit
という似たような?コマンドが複数あるのかと混乱した記憶がありますが、今は下記図のように「一度に変更意図が異なる複数のファイルを変更してしまった時にセーブポイントをきれいにするために一旦ステージングエリアで整理する」というイメージで理解しています。
一度に複数のファイルを変更していない場合でもgit add
は必要だということと上記はあくまでイメージであることにご注意ください。
git status
なにがステージングエリアにあり、なにが作業ディレクトリにあるかを確認します。
うっかり、間違ったものをコミットしてしまわないように念の為コミット前に確認しています。
git log
コミット履歴を確認できます。オプションをつけないと画面幅をとって一度に多くを眺めることができないので、--oneline
オプションと-n
オプションを使って1コミット1行で指定した行数分だけ表示するようによくしています。
git checkout
やgit stash
などでブランチを変えながら作業することも少なくないので、今いるブランチの履歴が正しいかなどを確認したり、git reset
をするために使っています。
$ git log --oneline -5
git push origin <remoteBranch>
ローカルリポジトリにあるコミット群をリモートリポジトリにpushしてPRを作成します。
git pull origin <remoteBranch>
リモートリポジトリから指定したブランチ名を持ってきます。
git chekout -b branch <branchName>
ブランチを作成するコマンドです。git branch <branchName>
でもブランチを作成できますが、checkoutの場合はこのコマンドだけでそのブランチに移動してくれるのでcheckoutを使っています。
git branch
ローカルリポジトリのブランチ一覧を確認できます。
git checkout <branchName>
指定したブランチに移動します。git branch
でブランチを一覧表示してからこのコマンドを使うことが多いです。
ブランチの移動はgit checkuoutではなくgit switch
を使おうという話がありますが、自分はいまだに切り替えられていません、、、
git checkout -
あまり知られていない印象ですが、一番使うと言っても過言でないほどこのコマンドを使っています。これは1つ前にいたブランチに移動してくれるコマンドです。実装途中に別のブランチに移動して戻る時に、一つ前のブランチ名を思い出さなくて良いので大変便利です。
しかし、Ctrl + z(CMD/⌘ + z)でよく使われるUndoとは挙動が異なるので注意が必要です。
2回git checkout -
を実行すると今いるブランチに戻ってきます。
必要に応じて使うコマンド
git branch -d branch
ローカルリポジトリのブランチを削除するコマンド。git branch
したあとに、ブランチが多すぎてどれがどれだっけってなってきたらこのコマンドでお掃除します。
git stash
実装途中に差し込みでタスクが入ってきた時に、作業ファイルを一時的に退避させるコマンド。
下記のように実施することが多いです。
## 作業ファイルを全て退避
$ git stash -u
## ~~~
## 別のブランチやらでの作業完了
## ~~~
$ git stash pop
git stash
は複数回実施するとスタックで溜まっていきます。特定のstashだけ元に戻す/削除もできます
$ git stash list
stash@{0}: WIP on <branchName>: <commitHash> 3番目にstashしたファイル群
stash@{1}: WIP on <branchName>: <commitHash> 2番目にstashしたファイル群
stash@{2}: WIP on <branchName>: <commitHash> 1番目にstashしたファイル群
## 2番目にstashした履歴だけ元に戻す
## applyはpopとは違いスタックから取り出される(スタックからいなくなる)わけではないので注意
$ git stash apply stash@{1}
## 1番目にstashした履歴を削除
## dropの場合はスタックからなくなってしまいます
git stash drop stash@{2}
git stash
はgit commit
とは違いセーブポイント作ってくれるわけではありません。git stash drop
やgit stash clear
などを使って履歴を削除してしまうと元に戻せないので慣れていない方は使わない方が良いと思います。
git rebase <branchName>
git merge
と似ているのですが、結果が異なります。git merge
はmerge commitが作られるのに対して、git rebase
は何事もなかったかのように現在のブランチのcommit群がrebase対象のブランチのcommit群の後に作成された状態になります。
詳細は下記の記事に詳しいので気になる方はご覧ください。
git rebase
はコミット履歴を綺麗にしたいからという理由で使われることが多い印象です。
しかし、一度リモートリポジトリに上がったブランチでgit rebase
をしてしまうと再度リモートブランチにpushする際にforce push(git push -f
)を使う必要が出てきてしまうため、無闇に使わずにローカルでの使用に留めた方がいいと思います。
git reset <commitHash>
作業ディレクトリを特定のcommit時点に戻すコマンドです。
ただし、2個以上前のcommit時点に戻るとそれまでのcommitも全てなかったことになるので、ご注意ください。
--soft
オプションを使えば、commitしていた内容がステージングエリアに戻ってくれるので便利です。
同じcommitに含めたかったのにこのファイルを入れ忘れた!なんて時に便利です。
$ git commit -m '1つ前のコミットのメッセージ'
## 上のコミットでtest.jsファイルを含め忘れていたことに気づく
$ git log --oneline -5
<commitHash1> 1つ前のコミットのメッセージ
<commitHash2> 2つ前のコミットのメッセージ
<commitHash3> 3つ前のコミットのメッセージ
$ git reset --soft <commitHash1>
$ git add test.js
$ git commit -m 'test.jsを含んだコミットメッセージ'
このコマンドも、すでにリモートリポジトリに上がっているブランチに対して実行してしまうとforce pushする必要があるため、ローカルでの使用に留めた方がいいと思います。
Discussion