Bash
+
#
1: 2: 3: 4: 5: 6: 7: 8:
// 直前のコミットを対象とする場合
$ git reset --soft HEAD~
// 特定のコミット(まで)を対象とする場合
$ git reset --soft コミットID
// 最初のコミット(まで)を対象とする場合
$ git update-ref -d HEADPost: Nekoformi
Date: 2024/04/15
リポジトリーの奥底で眠っていた古のコミットに過ちが発覚しても絶望しないでください! 過去のコミットや歴史を操作する方法があります!
前回のコミットを修正したい場合や特定のコミットへ遡り内容を上書きしたい(それ以降の変更を対象に纏める)場合は、以下の操作を行います。
resetで取り消します。logで確認できます。HEADは現在のブランチの地点を示すものであり、HEAD~nでn世代前のコミット(n世代目の親コミット)を指定することができます。update-refを使用する必要があります。1: 2: 3: 4: 5: 6: 7: 8:
// 直前のコミットを対象とする場合
$ git reset --soft HEAD~
// 特定のコミット(まで)を対象とする場合
$ git reset --soft コミットID
// 最初のコミット(まで)を対象とする場合
$ git update-ref -d HEADaddします。今回はオプション:--softを指定しているので、上記のコマンドを実行する前に作業が完了している(ステージングされている)場合はそのまま次へ進みます。1:
$ git add .commitします。1:
$ git commit --amendpushします。破壊的な操作なのでオプション:--forceを付与する必要があります。1:
$ git push --force origin今までのコミットを取り消すのではなく、特定のコミットを上書きする(初めから修正された内容が存在した状態で以降のコミットが構成されるようにする)場合は、以下の操作を行います。
rebaseで上書きしたいコミットへ戻ります。この時、対象のコミットIDではなく対象の親のコミットIDを指定してください!-iで対話的(直感的)に操作を指定することができます。--rootを使用する必要があります。1: 2: 3: 4: 5:
// 特定のコミットに遡る場合
$ git rebase -i コミットID
// 最初のコミットに遡る場合
$ git rebase -i --rootaddします。1:
$ git add .commitします。1:
$ git commit --amendrebaseします。コンフリクト(衝突)が起きた場合は解消してからリベースを再開しましょう。1:
$ git rebase --continuepushします。破壊的な操作なのでオプション:--forceを付与する必要があります。1:
$ git push --force origin