web-dev-qa-db-ja.com

コミットされるリストからファイルを削除します

Gitリポジトリに変更されたファイルのリストがあります。現時点ではコミットしたくないファイルが1つあります。僕にできる:

git commit -a

すべてのファイルをコミットし、そのファイルを現在のコミットから何らかの形で削除するには?そのような削除の後、それはまだコミットされていないファイルのリストにあるはずです。

45
Max Frai

これを行いたい:

git add -u
git reset HEAD path/to/file
git commit

リポジトリの最上位から確認してください。 add -uは、現在のディレクトリに(再帰的に)変更を追加します。

キー行は、インデックス内の指定されたパスのバージョン(コミットのステージング領域)をHEAD(現在チェックアウトされているコミット)のバージョンにリセットするようにgitに指示します。

そして、これを読んでいる他の人への落とし穴の事前警告:add -uはすべての変更をステージングしますが、追跡されていないファイルは追加しません。これは、commit -aが行うことと同じです。追跡されていないファイルも追加する場合は、add .を使用して再帰的にeverythingを追加します。

58
Cascabel

git rm --cachedはコミットセットから削除します(「追加解除」)。それはあなたが望むもののように聞こえます。

37
DavidR

すでにコミットをプッシュしている場合。行う

git checkout Origin/<remote-branch> <filename>
git commit --amend

また、サーバーに変更をプッシュしていない場合は、使用できます

git reset --soft HEAD~1
13
Ashish Sajwan

Stashを使用します。このような:

git add .
git reset Files/I/Want/To/Keep
git stash --keep-index
git commit -a -m "Done!"
git stash pop

誤ってファイルをコミットし、git履歴を書き換えたい場合は、次を使用します。

git reset HEAD~1 path/to/file
git commit -a -m "rollback"
git rebase -i HEAD~2

そして、2つの主要なコミットにスカッシュします。自動的にコミットしたくない既知のファイルセットがある場合、これらのいずれかを実行するヘルパースクリプトを作成できます。

5
Doug

たぶん、stashを使用して修正を一時的にパッチファイルに保存し、それを(古いバージョンに戻るためのチェックアウト後に)再適用することもできます。これは、この他のトピックに関連している可能性があります。 git stashから単一のファイル(またはファイルへの変更)を抽出するにはどうすればよいですか?

1
ThR37

回答:

git reset HEAD path/to/file
0

git addを実行し、まだ何もプッシュしていない場合は、コミットからステージングを解除するためにこれを行う必要があります。

git reset HEAD <file>

0
David

そのファイルを元の状態にリセットし、--amendを使用して再度コミットする必要があります。これは、git checkout HEAD^を使用して最も簡単に実行できます。

デモを準備する:

$ git init
$ date >file-a
$ date >file-b
$ git add .
$ git commit -m "Initial commit"
$ date >file-a
$ date >file-b
$ git commit -a -m "the change which should only be file-a"

前の状態:

$ git show --stat
commit 4aa38f84e04d40a1cb40a5207ccd1a3cb3a4a317 (HEAD -> master)
Date:   Wed Feb 7 17:24:45 2018 +0100

    the change which should only be file-a

 file-a | 2 +-
 file-b | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

ここに来る:以前のバージョンを復元する

$ git checkout HEAD^ file-b

コミットする:

$ git commit --amend file-b
[master 9ef8b8b] the change which should only be file-a
 Date: Wed Feb 7 17:24:45 2018 +0100
 1 file changed, 1 insertion(+), 1 deletion(-)

後の状態:

$ git show --stat
commit 9ef8b8bab224c4d117f515fc9537255941b75885 (HEAD -> master)
Date:   Wed Feb 7 17:24:45 2018 +0100

    the change which should only be file-a

 file-a | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
0
Daniel Alder

これらの回答のほとんどは、「ステージング領域」の事前コミットからファイルを削除することを中心に回っていますが、すでにコミットした後、ここで探していることがよくあります。

覚えやすいトリックgit commit --amend私のような人々はあなたができることです:

  1. 誤ってコミットされたファイルを削除します。
  2. git add .「ステージング領域」に削除を追加します
  3. git commit --amend前のコミットからファイルを削除します。

コミットメッセージで、不要なファイルが失われていることがわかります。やった! (コミットSHAは変更されるため、既に変更をリモートにプッシュしている場合は注意してください。)

0
Breedly