ローカルの変更を間違えて developブランチにコミットしちゃったことありませんか?
私はよく、featureブランチを切る前にdevelopブランチにコミットしてしまうことがあります。
Gitのミスって、すごく焦りますよね。
この記事では、そんな状況で行った私の対処法を紹介します。
間違ってdevelopにコミットしてしまった時の対処
まだpushしてない場合
ローカルだけの問題なら、簡単に対処できます。
対処1. そのままfeatureにマージ
まずは、本来コミットするはずだったfeatureブランチに移動します。
次に、developの内容をfeatureブランチにマージしちゃいます。
# featureブランチに移動
git checkout feature
# 間違ってコミットしたdevelopの変更をfeatureにマージ
git merge develop
これで、本来あるべき場所に変更がコミットされている状態になります。
developは、一旦ローカルから削除して取り直すなどすればスッキリです。
私はこの方法で、何度か命を救われました。(万人に効くかはわかりません…)
対処2. developブランチのコミットを取り消す
git revertを使ってコミットを取り消す方法もあります。
# 特定のコミットを取り消す
git revert <commit>
# 直前のコミットを取り消す
git revert HEAD
git revertは「変更を取り消したよ」という内容がコミットされます。
間違ってコミットした事実は隠せません。
対処3. コミットをリセットする
git resetで、変更を特定のコミットの状態までリセットすることが出来ます。
# --soft:commitだけ取り消し、変更をインデックスに追加した状態へ戻る。
git reset --soft <commit>
# --mixed:commitとaddを取り消し、変更をインデックスに追加前へ戻る。
git reset --mixed <commit>
オプションの–softはgit addした状態まで戻し、–mixedはgit addする前の状態まで戻します。
どちらも、変更した内容はローカルの作業ファイルに残ります。
もうpushした場合
すでにpushしてるとなると、気持ちの問題で大変です。(私はかなり焦ります)
早急にチームメンバーに相談するのがベストだと思います。
対処1. 変更取り消しコミットをpush
直前のコミットであれば、ローカルで取り消して再度リモートへpushすることで変更を元に戻せます。
# 直前のコミットを取り消してから
git revert HEAD
# developにpush
git push origin develop
対処2. 強制pushで無かったことに(要相談)
git resetでも元に戻せますが、かなりの確率で事故になると思います。
チームメンバーと相談してから、実行するか考えた方がいいです。
直前の変更を無かったことにしてpushするのですが、履歴に不整合が生じて失敗するので強制的にpushうすることになります。
# 直前のコミットを無かったことに
git reset --hard HEAD^
# リモートの履歴を強制的に書き換え
git push -f origin develop
コミットの間違いには注意しましょう。
コメント