Gitリポジトリに変更されたファイルのリストがあります。現時点ではコミットしたくないファイルが1つあります。僕にできる:
git commit -a
すべてのファイルをコミットし、そのファイルを現在のコミットから何らかの形で削除するには?そのような削除の後、それはまだコミットされていないファイルのリストにあるはずです。
これを行いたい:
git add -u
git reset HEAD path/to/file
git commit
リポジトリの最上位から確認してください。 add -u
は、現在のディレクトリに(再帰的に)変更を追加します。
キー行は、インデックス内の指定されたパスのバージョン(コミットのステージング領域)をHEAD(現在チェックアウトされているコミット)のバージョンにリセットするようにgitに指示します。
そして、これを読んでいる他の人への落とし穴の事前警告:add -u
はすべての変更をステージングしますが、追跡されていないファイルは追加しません。これは、commit -a
が行うことと同じです。追跡されていないファイルも追加する場合は、add .
を使用して再帰的にeverythingを追加します。
git rm --cached
はコミットセットから削除します(「追加解除」)。それはあなたが望むもののように聞こえます。
すでにコミットをプッシュしている場合。行う
git checkout Origin/<remote-branch> <filename>
git commit --amend
また、サーバーに変更をプッシュしていない場合は、使用できます
git reset --soft HEAD~1
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つの主要なコミットにスカッシュします。自動的にコミットしたくない既知のファイルセットがある場合、これらのいずれかを実行するヘルパースクリプトを作成できます。
たぶん、stashを使用して修正を一時的にパッチファイルに保存し、それを(古いバージョンに戻るためのチェックアウト後に)再適用することもできます。これは、この他のトピックに関連している可能性があります。 git stashから単一のファイル(またはファイルへの変更)を抽出するにはどうすればよいですか? 。
回答:
git reset HEAD path/to/file
git addを実行し、まだ何もプッシュしていない場合は、コミットからステージングを解除するためにこれを行う必要があります。
git reset HEAD <file>
そのファイルを元の状態にリセットし、--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(-)
これらの回答のほとんどは、「ステージング領域」の事前コミットからファイルを削除することを中心に回っていますが、すでにコミットした後、ここで探していることがよくあります。
覚えやすいトリックgit commit --amend
私のような人々はあなたができることです:
git add .
「ステージング領域」に削除を追加しますgit commit --amend
前のコミットからファイルを削除します。コミットメッセージで、不要なファイルが失われていることがわかります。やった! (コミットSHA
は変更されるため、既に変更をリモートにプッシュしている場合は注意してください。)