みなさんこんにちは。
前回第2回に引き続き、コマンドラインによるgitのソースコード管理方法についてお話したいと思います。
今回は誤操作の復旧系のコマンドが多い感じです。
●マージの取り消し
・git merge –abort
※マージ後、コミット前まで有効です。
※マージでコンフリクト(競合)が発生した場合でも、競合の編集していないければ取り消し可能です。
●マージで競合が発生し、競合の編集をしたが、やっぱりやめたい場合
・git reset –hard HEAD
※行った編集もマージ自体もすべて取り消されます。
●間違ってpushしたときに直前のコミットのpushを取り消す
・git reset –hard HEAD^
・git push -f origin ブランチ名
※すでにリモートにさらされたコミットですので、第三者がすでに目にしてしまっているかもしれません。間違いにすぐに気づいたときに行うのがベストです。
※reset後に、-f を指定して強制的にpushしています。-fをつけないとpushのエラーになります。
●push前で、直前のコミットを取り消す(addした状態まで戻す)
・git reset –soft HEAD^
※addした状態まで戻るので、行った変更は残っています。
●push前で、直前のコミットを取り消す(ローカルで行った変更も含めてなかったことにする)
・git reset –hard HEAD^
※ステージング内容もクリアされ、直前のコミットに関する編集内容がなかったことになります。完全に消し去るので復旧することができません。
●競合の解決
git pullや「git merge ブランチ名」を行ったときに、競合が発生する場合があります。
<<<<<<< HEAD
if (a == b) {
=======
if (b == c) {
>>>>>>> 1234567890abcdefghijklmnopqrstuvwxyz
HEADが自分のローカルの変更、ハッシュタグ1234567890abcdefghijklmnopqrstuvwxyzがリモートの変更(第三者などのマージによる)です。
テキストエディタでつじつまが合うように内容を修正したあと、
・git add ファイル名
・git commit -m “コミットコメント”
・git push origin ブランチ名
で解決した競合をコミット/プッシュします。
※GitLab, GitHubを導入している場合は、そちらのマージリクエスト(プルリクエスト)上で競合の解決をしたほうが便利です。解決後、git pullでローカルのブランチにも反映させることを忘れずに。
今回までgitのコマンドの説明をしましたが、いかがでしたでしょうか?
今後も役に立つコマンドが見つかりましたら紹介していきたいと思います。