前回のコミットで2つのファイルa
、b
を変更しました。しかし、ファイルb
はコミットされるべきではありません、これを修正するためのワークフローは何ですか?
更新(数年後)
インデックスからのみ削除するのは簡単です。
True: より最近の答え ( によって書かれたので)ファイルをインデックスの内容に簡単にリセットすることができます。コノリー )は示唆している:
git reset HEAD^ path/to/file/to/revert
HEAD^
は、ファイルが前回のコミットbefore最後のコミットでその内容にアクセスすることを許可します。
私が最初に下記に書いたようにそれからあなたは git commit --amend
をすることができます。
オリジナルの回答(2011年1月)
これがあなたの最後のコミットであれば(そしてどこにもプッシュしていないのなら)、 それを修正することができます :
(最初の隠しファイルまたはb
の保存)
git commit --amend
それからbを削除し、再度コミットします。 bを復元すれば完了です。
--amend
現在のブランチの先端を修正するために使用されます。
通常通りに最新のコミットを置き換えたいツリーオブジェクトを用意し(これには通常の-i/-oと明示的なパスが含まれます)、コミットログエディタにはコミットメッセージが表示されます。現在のブランチ.
あなたが作成したコミットは現在のtipを置き換えます - それがマージであれば、それは現在のtipの親を親として持つでしょう - そのため現在のトップコミットは破棄されます。
git diff --name-only HEAD^
- (オプション)最後のコミットで変更されたファイルを一覧表示するために使用します。git reset HEAD^ path/to/file/to/revert
- インデックスをその最後のバージョンにリセットし、作業コピーはそのまま残します。git commit --amend
- 最後のコミットにインデックスの変更を含めるように修正するあるいは、git gui
を使用している場合は、「最後のコミットを修正する」オプションを選択するだけで、追加されたファイルが「ステージング」リストに表示されます。
最後のコミットから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 reset HEAD^
$ git add <all the files you want, excluding the one you don't want>
$ git commit -C HEAD@{1}
これは、(a)通常使用するコマンドを使用すること、および(b)コミットしたい内容を正確に把握するためにgit add -p
を実行することができるためです。