はじめに
最近、コードレビューを実施して承認する立場に変わりました。
開発しているときには使っていなかったコマンドやオプションを使うことで、コードレビューがスムーズになったので、記事にまとめます。
コードレビューの仕方
私のコードレビューのやり方が特殊かもしれないので、先にコードレビューのやり方を記載します。
コードレビューは、CodeCommitのプルリクエストを使用しています。
検索をしながら確認作業をしたいことが多いので、ローカルにチェックアウトしてきてVSCodeを使って差分を確認しています。
コードレビュー用のワークスペースを作成しています。
コードレビューは大きく以下の流れで進めています。(feature
ブランチをmaster
ブランチにマージするプルリクエストの場合)
-
master
ブランチの最新を取得する -
feature
ブランチをスカッシュマージする- 競合がでないかも確認する
- ビルドエラーや単体テストエラー(カバレッジ確認も含む)がないかも確認する
- 差分を確認する
- ステージングされている差分を確認していき、確認が終わったらアンステージングする
- 確認が終わったら、差分を全て削除する
Gitコマンド
git fetch --prune
リモートリポジトリの最新の状態をローカルリポジトリに反映する際、git fetch
コマンドを使用します。
--prune
オプションを付けることで、リモートリポジトリで削除されたブランチをローカルリポジトリから削除することができます。
レビューをしていて、ローカルリポジトリにチェックアウトしているブランチが多くなってきたときに使用します。
特に、同じよう名前で作業ブランチが切られている場合は、頻繁に実施しています。
git branch | grep -v "$(git branch --show-current)" | xargs git branch -D
ローカルリポジトリにチェックアウトしているブランチを削除するときに使用します。
少し解説をします。
-
git branch
:現在チェックアウトされているブランチ名を出力する -
grep -v "$(git branch --show-current)"
:git branch --show-current
で現在のブランチ名を取得し、grep -v
でそれ以外のブランチ名を出力する -
git branch -D
で出力されたブランチを強制的に削除する
※-d
にすると、マージ済のブランチのみ削除できます
git fetch --prune
の後に、流れで実施することが多いです。
git diff <commit A> <commit B> -- <file-path>
指定したファイル(パス:file-path
)のcommit A
とcommit B
間の差分のみを出力する。
ブランチだけでなく、コミット番号でも利用可能です。
commit A
をベースにcommit B
の差分を出力するので、+
となっているものはcommit B
で追加されたもの、-
となっているものはcommit B
で削除されたものを表しています。
1度コードレビューしてコメントを入れたものに対して、再度コードレビューする際によく利用しています。
commit A
に1度目のコードレビューをしたコミット番号を指定し、commit B
に修正後のコミット番号を指定しています。
※commit B
を指定しなくても同じ差分が出力されますが、後からhistory
コマンドで確認することがあるので、指定するようにしています。
git diff <branch A> <branch B> --diff-filter=<filter>
branch A
とbranch B
間の差分をフィルタリングして出力します。
filter
に指定できるのは以下の通りです。
小文字を指定するとフィルタリング内容を反転させれるのは便利ですね。
filter |
フィルタリング内容 |
---|---|
A | 追加されたファイルを除外 |
a | 追加されたファイルのみを出力 |
M | 変更されたファイルを除外 |
m | 変更されたファイルのみを出力 |
R | リネームされたファイルを除外 |
r | リネームされたファイルのみを出力 |
D | 削除されたファイルを除外 |
d | 削除されたファイルのみを出力 |
特にビッグバン的なプルリクエストのコードレビューをするときに使用します。
m
を指定することが多いです。
git show <branch>:<file-path>
指定したブランチ(branch
)の指定したファイル(パス:file-path
)の内容を出力する。
あまり使うことがないですが、他のブランチの作業内容を手動でコピーしているときに使用します。
rm -rf !(.git) && git pull origin
gitコマンドではないですが、このコマンドでワークスペースをきれいにしています。
少し解説をします。
-
rm -rf !(.git)
:.git
ディレクトリ以外を全て削除する -
git pull origin
:リモートリポジトリから現在のブランチの最新を取得する
パッケージを追加するようなコードレビューをすると、ビルド後のディレクトリやファイルが残るので、そのようなファイルを削除するために使用します。
さいごに
皆さんが使っている「知ってよかったGitコマンド」もコメントで教えていただけると嬉しいです。