回答:
あなたが欲しい:
git rm --cached [file]
--cached
オプションを省略すると、作業ツリーからも削除されます。ステージングされたコンテンツがブランチの先端またはディスク上のファイルのいずれとも一致しない場合は警告が表示されるため、git rm
は少し安全git reset
です。(そうでない場合は、を追加する必要があります--force
。)
git rm --cached
、レポからそれらを削除する.gitignore、ステージに関連するファイルやディレクトリを追加し、通常どおりコミット。これらはリポジトリから削除されますが、ローカルツリーにはそのまま残り、誤って再度チェックインすることはありません。
これにより、<file>のステージが解除されます(ファイルを削除したり変更したりする必要はありません)。
git reset <file>
HEAD
。
HEAD
!
ワークフローによっては、コマンドラインソリューションを理解しようとしてもほとんど意味がない場合があります(何らかの理由でグラフィカルインターフェイスなしで作業している場合を除きます)。
たとえば、インデックス管理をサポートするGUIベースのツールの1つを使用するだけです。
git gui
<-Tkウィンドウフレームワークを使用します-に類似したスタイル gitk
git cola
<-よりモダンなスタイルのGUIインターフェイスこれらを使用すると、ポイントアンドクリックでファイルをインデックスの内外に移動できます。ファイルの一部(個々の変更)を選択し、インデックスから移動することもできます。
別の見方はどうですか:提案された、かなり不可解なコマンドの1つを使用しているときに混乱した場合:
git rm --cached [file]
git reset HEAD <file>
...あなたはデータを失う可能性があります-または少なくとも見つけるのを難しくします。これを非常に高い頻度で行う必要がない限り、GUIツールを使用する方が安全です。
コメントや投票に基づいて、多くの人が常にインデックスを使用していることに気付きました。私はしません。方法は次のとおりです。
git commit -a
git commit (list of files)
git commit -a
その後、改正を経てgit gui
git difftool --dir-diff --tool=meld
git commit -a
ます。私がこの質問に答えていたのは、ファイルをインデックスに入れる(エキゾチックな)「インバースチェリーピック」を実行したためですが、コミットする前にファイルを編集したかったのです。編集中にファイルをインデックスから取り出して、差分が以前と同じように機能するようにしました。
rm
ですが、ブランチを切り替えても無視されたフォルダーは削除されないだろうと最初に思いました。しかし ...私はgithubの「GUIベースの」ツールを使用しています。これは私にとって十分なツールであり、これをサポートしていない場合を除いて、いくつかのインデックス管理をサポートしています。だから、私は2つのGUIを使用する必要がありますか?まだ答えに同意できません。