回答:
更新(数年後)
インデックスからのみ削除するのは簡単です。
True:最近の回答(Matt Connollyによって書かれた)が示唆するように、ファイルをインデックスコンテンツに簡単にリセットできます。
git reset HEAD^ path/to/file/to/revert
HEAD^
ファイルが最後のコミットの前の以前のコミットでそのコンテンツにアクセスできるようにします。
次にgit commit --amend
、最初に以下に書いたように、できます。
Git 2.23(2019年8月)では、新しいコマンドを使用できますgit restore
git restore --source=HEAD^ --staged -- path/to/file/to/revert
より短い:
git restore -s@^ -S -- path/to/file/to/revert
繰り返しますがgit commit --amend
、最初に以下に書いたように、できます。
元の回答(2011年1月)
これが最後のコミットである(そしてどこにもプッシュしていない)場合、修正できます:(
最初のstashまたはsave b
)
git commit --amend
次にbを削除し、再コミットします。bを復元すれば完了です。
--amend
現在のブランチの先端を修正するために使用されます。
通常のように最新のコミットを置き換えるツリーオブジェクトを準備します(これには通常の-i / -oおよび明示的なパスが含まれます)。現在のブランチの先端からコミットログエディターにコミットメッセージがシードされます。
作成したコミットによって現在のヒントが置き換えられます(マージの場合、現在のヒントの親が親になります)。したがって、現在のトップコミットは破棄されます。
git diff --name-only HEAD^
-(オプション)最後のコミットで変更されたファイルをリストするために使用します。git reset HEAD^ path/to/file/to/revert
- インデックスを最後のバージョンにリセットし、作業コピーをそのままにします。git commit --amend
- インデックスの変更を含めるために最後のコミットを修正するgit commit -a --amend
ステップ3には使用しない(ファイルを追加しない)か、削除しようとしている編集である作業コピーの変更をコミットすることに注意してください。オプションのステップ2.5はgit checkout path/to/file/to/revert
、作業コピーもクリーンアップすることです。
git rm --cached path/to/file/to/revert
ツリーから削除せずにファイルを追加解除する代わりに。
最後のコミットからbを削除する場合
git rm --cached b (will preserve the file in the working tree but remove it from the index)
git commit --amend
最後のコミットでbへのすべての変更を削除する場合
(backup b)
(modify b to state before incorrect commit)
git commit --amend
(restore b)
git rm --cached
バックアップ/復元ダンスを廃止します(-1)。
... Then stash/delete b, re-commit..
、ここでの単語はいけませんThen
ことafter
?---amend
stach /削除Bの後に、...