🎋

Webフロントエンドエンジニアの私が普段業務で使っているGitコマンド

2024/05/30に公開

はじめに

Webフロントエンドエンジニアとして業務をしていて、普段使用しているGitコマンドをまとめてみました。どなたかの参考になれば幸いです。

また、この記事は、「これだけ抑えておけば良い。」というものではなく、あくまで私の業務環境に依存しているものになります。現場によってはここに載っていないコマンドを使わなければならない場面もあるかと思いますので、ご了承ください。

毎日のように使うコマンド

git add

作業ディレクトリにあるファイル群をステージングエリアに移動するためのコマンドです。

git commit

git addでステージングエリアに移動したファイル群をローカルリポジトリにさらに移動するコマンドです。
最初なぜgit addgit commitという似たような?コマンドが複数あるのかと混乱した記憶がありますが、今は下記図のように「一度に変更意図が異なる複数のファイルを変更してしまった時にセーブポイントをきれいにするために一旦ステージングエリアで整理する」というイメージで理解しています。

一度に複数のファイルを変更していない場合でもgit addは必要だということと上記はあくまでイメージであることにご注意ください。

git status

なにがステージングエリアにあり、なにが作業ディレクトリにあるかを確認します。
うっかり、間違ったものをコミットしてしまわないように念の為コミット前に確認しています。

git log

コミット履歴を確認できます。オプションをつけないと画面幅をとって一度に多くを眺めることができないので、--onelineオプションと-nオプションを使って1コミット1行で指定した行数分だけ表示するようによくしています。
git checkoutgit 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を使おうという話がありますが、自分はいまだに切り替えられていません、、、
https://kakakakakku.hatenablog.com/entry/2020/04/08/151627

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 stashgit commitとは違いセーブポイント作ってくれるわけではありません。git stash dropgit stash clearなどを使って履歴を削除してしまうと元に戻せないので慣れていない方は使わない方が良いと思います。

git rebase <branchName>

git mergeと似ているのですが、結果が異なります。git mergeはmerge commitが作られるのに対して、git rebaseは何事もなかったかのように現在のブランチのcommit群がrebase対象のブランチのcommit群の後に作成された状態になります。
詳細は下記の記事に詳しいので気になる方はご覧ください。
https://zenn.dev/yskn_sid25/articles/2e57805dab6745

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