はじめまして、TENTIALというスタートアップでエンジニアをしてます、あおいです。
エンジニア実務未経験で2021年1月から開発に携わり1ヶ月が過ぎましたが、この1ヶ月は学ぶ事が多く非常に充実していました。
初めてのことばかりで課題は多くありましたが、その中でも今回はGitに焦点を当てて話していこうと思います。
なぜGitなのかと言うと、実務未経験者が最初に苦労する分野だと思いますし、僕自身も若干苦労した部分もあるからです。
それに、実務に入って間もない人は、git push origin master
等の誤操作でチームに迷惑をかけてしまう可能性もあるため、Gitは怖い印象があると思います。
ですので、実務に入って間もない方や、これから開発現場に入る方が「もうGitは怖くない!」と思っていただけるような記事を書くのでぜひ参考にしてください。
実務でよく使ったGitコマンド
入社するまでGitコマンドを使った開発経験が薄かったため、最初はうまくいきませんでしたが、覚えてしまえばとても簡単でした。
Gitコマンドは覚えていて損はしないので、覚えていない方はこの機会にぜひどうぞ。
主な作業の流れ
コミットまで
% git add -p ファイル名 % git commit -m 'コミット名'
コミット後
% git checkout develop // developブランチに移動 % git pull origin develop // 最新のdevelopを取り込む % git checkout 作業ブランチ // 作業ブランチに移動 % git merge develop // developの情報をマージ % git push origin 作業ブランチ // リモートにプッシュ
基本的には、これらのコマンドを使って開発を進めます。
そして最後にプルリクを送ってレビューを貰い、マージするという形ですね。
プルリクの内容
- 概要(イシュー、やったことなど) - スクリーンショット - 作業ページURL - 参考資料 - レビュワーへのコメント、補足事項
プルリクは上記のように何をやったか分かりやすく書くと良いでしょう。
基本的なGitコマンド
次にGitを利用する上で覚えておくべき基本的なコマンドを紹介します。
どれもよく使うコマンドなので、この機会にぜひ。
git branch
% git branch // ローカルのブランチを表示 % git branch -a // 全てのブランチを表示 % git checkout -b ブランチ名 // ブランチを作成&切り替え % git branch -m 新しいブランチ名 // ブランチ名を変更 % git branch -d ブランチ名 // ブランチを削除
git commit
コミットにも便利なコマンドがあるのでご紹介します。
% git reset --hard HEAD^ // 直前のコミットを取り消し // HEAD^は直前のコミットを意味 git commit --amend // コミットの上書き
上記の通りです。
ちなみにHEAD
を付ければどのコミットなのか特定できるので、非常に便利です。
具体的には、git reflog
を使うことで、今までの記録が全て見れるため、好きなタイミングに戻ることができます。
% git reflog 7360989 HEAD@{0}: reset: moving to HEAD@{0} 7360989 HEAD@{1}: reset: moving to HEAD^ d3ac105 HEAD@{2}: commit: add: コミット 7360989 HEAD@{3}: commit: first commit 3bf2ad6 HEAD@{4}: commit (initial): init
上記のようにHEAD@
の横に番号が振られているので、その番号を指定する感じで、例えば
% git reset --hard HEAD@{2}
のように打つとadd: コミット
の時のコミットに戻る事ができます。
何かの手違いでコミットを取り消してしまったり「あの時に戻りたい・・・」と思った時はこのコマンドが最強だと思います。
git stash
まだ作業中でコミットしたくないけど、別のブランチで急遽作業しなければならない場合、git stash
コマンドを使えば今やっている作業を一旦隠すことができます。
% git stash // 作業を隠す // コミットせず他のブランチで作業ができる % git stash list // 隠した作業内容を一覧で表示 % git stash apply // 隠した作業内容を復元 % git stash drop // 隠した作業内容を削除
上記のgit stash
コマンドは結構便利なのでうまく使えると良いと思います。
git merge
% git merge ブランチ名 // 今いるブランチと指定したブランチをマージする % git merge --abort // マージを取り消しできる
git merge
してコンフリクトが発生した時に「一旦元に戻したいな・・・」って思う時がありますが、その際はgit merge --abort
を使うと、便利なことにマージを取り消してくれます。
その他便利なコマンド
最後に基本的なコマンドを一覧にして紹介します。
% git diff // 差分を表示 % git status // 前回のコミットと比較して変更ファイルを表示 % git log // コミットログを表示 % git rebase ブランチ名 // 指定したブランチのコミットを引き継ぐ
上記の通りです。
現役エンジニアの方からすると基本過ぎますが、これからGitを利用した開発現場に入る方は参考にしてください。
僕自身、未だ知らないGitコマンドは山ほどあるので、これから少しずつアウトプットしていきます^^
これは使える!分かりやすいGitの基本ルール
あと、実務に入って「これは分かりやすくて良いな」と思った基本的なGitのルールをまとめてみました。
1. ブランチ名はfeature/${名前}_${作業内容}にする
ブランチ名は、誰が何を作業したのかが一発で分かるように命名すべきです。
<例>
feature/aoi_time_sale
2. 作業中のブランチは【WIP】をつける
プルリクエスト時に、この【WIP】を使う事でレビュワーの優先順位が一瞬で分かるので、とても便利ですw
<例>
【WIP】feature/aoi_time_sale
以上です。
他にも分かりやすいルールなどあればコメント欄にて教えていただけると嬉しいです!
出会ったGitのエラーをまとめてみた
Gitを使っていると、やはりエラーに遭遇することもよくありました。 そこで、これまで遭遇したエラーを覚えている限り書き出してみます。
1. Matched one or more prohibited patternsのエラー
これはコンフリクトが発生した際にgit commit
をすると出てくるエラーです。
[ERROR] Matched one or more prohibited patterns Possible mitigations: - Mark false positives as allowed using: git config --add secrets.allowed ... - Mark false positives as allowed by adding regular expressions to .gitallowed at repository's root directory - List your configured patterns: git config --get-all secrets.patterns - List your configured allowed patterns: git config --get-all secrets.allowed - List your configured allowed patterns in .gitallowed at repository's root directory - Use --no-verify if this is a one-time false positive
こんな感じで出てきて、最初は焦ったんですけどかなり簡単に解決できます。
結論、最後の行のUse --no-verify if this is a one-time false positive
の通りです。
要するに--no-verify
を使用すればこの状態を回避できるらしい...!
早速やってみましょう。
% git commit -m ‘コンフリクト解消’ --no-verify
うまくコミットできました。
2. rejectされた
次に作業ブランチからgit push
をした際に発生するエラーです。
! [rejected] feature/hogehoge -> feature/hogehoge (non-fast-forward) error: failed to push some refs to 'https://github.com/tential/hugahuga’ hint: Updates were rejected because the tip of your current branch is behind hint: its remote counterpart. Integrate the remote changes (e.g. hint: 'git pull ...') before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details.
一行目に書かれているnon-fast-forward
は、リモートのdevelopブランチとローカルのdevelopブランチの情報が異なっているという意味です。
そのためpushができず、rejectが表示されてしまいます。
とはいえ、エラー文を読めばヒントが書かれているので簡単に解決できそうですね。
このエラーの対処法は2つあり、1つ目はdevelopブランチに移動して最新情報を持ってくる対処法です。
1つ目の対処法
% git checkout develop // developブランチに移動 % git pull origin develop // 最新のdevelopを取り込む % git checkout 作業ブランチ // 作業ブランチに移動 % git merge develop // developの情報をマージ % git push origin 作業ブランチ // リモートにプッシュ
上記の通りです。
ただ、僕の場合はこの方法では解決しなかったので、2つ目の作業ブランチにリモートの情報を持ってくる対処法で処理しました。
2つ目の対処法
% git checkout 作業ブランチ // 作業ブランチに移動 % git pull origin 作業ブランチ // リモートの作業ブランチの情報を取り込む
以上です。
こうすることで、リモートの作業ブランチ情報とローカルの作業ブランチ情報を一致させることができます。
この後コンフリクトが出てくれば、解消後コミット&プッシュすれば解決です。
また、補足ですが3つ目の方法として
% git push -f origin 作業ブランチ
というのもあります。
こちらを実行すると強制的にpushできるので、上記2つの方法で上手くいかない方はこの方法を試すと良いかと思います。
3. GitHubの二段階認証後、Gitコマンドが操作できない
二段階認証を設定した後、ターミナルでgit操作をしようとするとエラーで何もできなくなりました。
ただ、これは設定上の問題なので次の手順を進めれば簡単に突破できます。
詳しくは以下の記事に書かれているのでぜひどうぞ。
参考記事:https://docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token
まとめ
以上、今回は基本的なGitコマンドや、Gitのエラーについてまとめました。
今後もGitを使って開発を進めていく以上、エラーが出ることもあると思いますが、Gitに関するエラーは意外とネット上に情報がある上、簡単なものが多いので、短期間でマスターしていけるかなと思います。
今回は以上です、最後まで読んでいただきありがとうございましたm(__)m