Bash
+
#
1: 2: 3: 4: 5: 6: 7: 8:
// 直前のコミットを対象とする場合
$ git reset --soft HEAD~
// 特定のコミット(まで)を対象とする場合
$ git reset --soft コミットID
// 最初のコミット(まで)を対象とする場合
$ git update-ref -d HEAD
Post: 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 HEAD
add
します。今回はオプション:--soft
を指定しているので、上記のコマンドを実行する前に作業が完了している(ステージングされている)場合はそのまま次へ進みます。1:
$ git add .
commit
します。1:
$ git commit --amend
push
します。破壊的な操作なのでオプション:--force
を付与する必要があります。1:
$ git push --force origin
今までのコミットを取り消すのではなく、特定のコミットを上書きする(初めから修正された内容が存在した状態で以降のコミットが構成されるようにする)場合は、以下の操作を行います。
rebase
で上書きしたいコミットへ戻ります。この時、対象のコミットIDではなく対象の親のコミットIDを指定してください!-i
で対話的(直感的)に操作を指定することができます。--root
を使用する必要があります。1: 2: 3: 4: 5:
// 特定のコミットに遡る場合
$ git rebase -i コミットID
// 最初のコミットに遡る場合
$ git rebase -i --root
add
します。1:
$ git add .
commit
します。1:
$ git commit --amend
rebase
します。コンフリクト(衝突)が起きた場合は解消してからリベースを再開しましょう。1:
$ git rebase --continue
push
します。破壊的な操作なのでオプション:--force
を付与する必要があります。1:
$ git push --force origin