web-dev-qa-db-ja.com

ファイルを追加解除する最後のコミットを修正する方法

前回のコミットで2つのファイルabを変更しました。しかし、ファイルbはコミットされるべきではありません、これを修正するためのワークフローは何ですか?

103
Xiè Jìléi

更新(数年後)

Jan Hudec

インデックスからのみ削除するのは簡単です。

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の親を親として持つでしょう - そのため現在のトップコミットは破棄されます。

100
VonC
  1. git diff --name-only HEAD^ - (オプション)最後のコミットで変更されたファイルを一覧表示するために使用します。
  2. git reset HEAD^ path/to/file/to/revert - インデックスをその最後のバージョンにリセットし、作業コピーはそのまま残します。
  3. git commit --amend - 最後のコミットにインデックスの変更を含めるように修正する
63
Matt Connolly

あるいは、git guiを使用している場合は、「最後のコミットを修正する」オプションを選択するだけで、追加されたファイルが「ステージング」リストに表示されます。

13
Jan Hudec

最後のコミットから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)
10
pingo

インデックスハッカーを必要としないが、それでも古いコミットメッセージを保持する代替手段

$ 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を実行することができるためです。

4
Justin L.