[Git]間違ってdevelopブランチにコミットした時はそのままfeatureブランチにマージしちゃえばいいんじゃない?って話

Git
スポンサーリンク

ローカルの変更を間違えて 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は「変更を取り消したよ」という内容がコミットされます。
間違ってコミットした事実は隠せません。

git revertで取り消した内容は作業ディレクトリには戻りません。
必要があれば、gitの履歴から復元してあげる必要があるかも…

対処3. コミットをリセットする

git resetで、変更を特定のコミットの状態までリセットすることが出来ます。

# --soft:commitだけ取り消し、変更をインデックスに追加した状態へ戻る。
git reset --soft <commit>
# --mixed:commitとaddを取り消し、変更をインデックスに追加前へ戻る。
git reset --mixed <commit>

オプションの–softはgit addした状態まで戻し、–mixedはgit addする前の状態まで戻します。

どちらも、変更した内容はローカルの作業ファイルに残ります。

–hardオプションを使用すると、ファイル全体が以前の状態に戻ります。
作業内容が全て無くなりますので、注意が必要です。

もう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

コミットの間違いには注意しましょう。

このブログでは、【ConoHa WING】を使っています

このブログでは、【ConoHa WING】を使っています
わたし、稼げました。

このブログでは、プログラミングでの学びをノート代わりとして記事としています。
少しずつPVが増えてきて、先日Google AdSenseの収益が振り込まれました!

どれくらいの記事数、期間、PVがあれば振込ボーターの8千円に到達するのか?
私のリアルな数字を紹介します。

ブログ村を利用しています
素人エンジニアの苦悩 - にほんブログ村
PVアクセスランキング にほんブログ村
Git
スポンサーリンク
スポンサーリンク
シェアする
amateur_engineerをフォローする
素人エンジニアの苦悩

コメント

タイトルとURLをコピーしました