gitcommitの削除

Gitを使用する場合、バグが発生したり、やり直したりする必要があるため、コミットを削除する必要がある場合があります。

最後のコミットは非常に簡単です。実行するだけです:

git reset HEAD^

これにより、最新のコミットがポップされますが、ファイルへの変更はすべてそのまま残ります。

最後のコミット以外を削除する必要がある場合は、2つの方法を使用できます。 1つ目はリベースを使用することで、1つ以上の連続したコミットを削除できます。もう1つは、連続していないコミットを削除できるチェリーピックです。

例gitlog

番号 ハッシュ コミットメッセージ 作成者
1 2c6a45b (HEAD)パブリックメソッドの追加保護されたメソッドにアクセスするには トム
2 ae45fab データベースインターフェイスの更新 請負業者1
3 77b9b82 データベースインターフェイスの改善 請負業者2
4 3c9093c 開発ブランチをマスターにマージ トム
5 b3d92c5 新しいイベントCMSモジュールの追加 ポール
6 7feddbb CMSクラスとファイルの追加 トム
7 a809379 Gitへのプロジェクトの追加 トム

リベースの使用

上記のgitログを使用して、次のコミットを削除します。 2 & 3(ae45fab & 77b9b82)。これらは連続したコミットであるため、リベースを使用できます。

git rebase --onto <branch name>~<first commit number to remove> <branch name>~<first commit to be kept> <branch name>

たとえばコミットを削除するには2 & 3上記

git rebase --onto repair~3 repair~1 repair

チェリーピックの使用

ステップ1:コミット前にコミットを見つける削除するgit log

ステップ2:コミットするチェックアウトgit checkout <commit hash>

ステップ3 :現在のチェックアウトコミットを使用して新しいブランチを作成しますgit checkout -b <new branch>

ステップ4:削除されたコミットの後にコミットを追加する必要がありますgit cherry-pick <commit hash>

ステップ5:保持したい他のすべてのコミットに対してステップ4を繰り返します。

ステップ6:すべてのコミットが新しいブランチに追加されたらコミットされました。すべてが正しい状態にあり、意図したとおりに機能していることを確認してください。すべてがコミットされていることを再確認します:git status

ステップ7:壊れたブランチに切り替えますgit checkout <broken branch>

ステップ8:削除するブランチの前に、コミットへの壊れたブランチでハードリセットを実行しますgit reset --hard <commit hash>

ステップ9:マージしますこのブランチへの固定ブランチgit merge <branch name>

ステップ10:マージされた変更を元に戻します。警告:これにより、リモートリポジトリが上書きされます! git push --force origin <branch name>

ステップ2 & 3をステップ8に置き換えて、新しいブランチを作成せずにプロセスを実行できます。手順7を実行しない& 9.

コミットを削除するとします2 & 4リポジトリから。

  1. git checkout b3d92c5最後に使用可能なコミットをチェックアウトします。
  2. git checkout -b repair作業する新しいブランチを作成します。
  3. git cherry-pick 77b9b82コミット3を実行します。
  4. git cherry-pick 2c6a45bコミット1を実行します。
  5. git checkout masterチェックアウトマスター。
  6. git reset --hard b3d92c5マスターを最後に使用可能なコミットにリセットします。
  7. git merge repair新しいブランチをマスターにマージします。
  8. git push --hard origin masterマスターをリモートリポジトリにプッシュします。

最後のメモ

Gitリベース&チェリーピックは危険ですが強力です最後にのみ使用する必要があるソリューションオプションであり、彼らが何をしているのかを知っている誰かによってのみ着手されます。どちらのソリューションも、同じリポジトリ/ブランチで作業している他のユーザーに悪影響を与える可能性があることに注意してください。

最後に、注意して頑張ってください!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です