簡潔な質問が 2 つあります。
- ファイルをステージングせずに追跡するにはどうすればよいですか?
- 追跡を解除せずにコミットのためにファイルをステージング解除するにはどうすればよいですか?
注記: ファイルを追跡するための最初のコミットを実行し、そこからファイルを追跡して開始できることはわかっています。しかし、私が上で尋ねていることを具体的に実行することは可能ですか?
使用しようとしましたgit add -N <expr>
が、ファイルを追跡してコミット用に追加します:
PS C:\> git add -N fileA
PS C:\> git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: fileA
#
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: README.md
# modified: composer.lock
# modified: fileA
#
git reset HEAD fileA
ステージングを解除するだけgit rm --cached fileA
でなく、ファイルの追跡も解除する場合、このコマンドはgit rm fileA
、ファイルを物理的に削除するフラグ -f を使用するように提案します。
つまり、ファイルを追跡するだけでステージングしないこと、また、ファイルのステージング解除だけで追跡解除しないことは可能ですか?
ベストアンサー1
更新 (2015 年 5 月)
使用しようとしました
git add -N <expr>
が、ファイルを追跡してコミット用に追加します:
今後の Git 2.5 (2015 年第 2 四半期) では、この状況は変わりました
。使用後、ファイルがコミットに含まれないgit add -N
「
元の回答(2013年3月)
追跡を解除せずにコミットのためにファイルをステージング解除するにはどうすればよいですか?
これが正式な方法です:
git reset HEAD fileA
ただし、これは新しいファイルなので、追跡解除も行います (以前のコミットで参照されていない状態で、インデックスから削除します)。
ファイルの追跡を開始するということは、そのファイルをインデックス (ステージ) またはコミットに含めることを意味します。
これらのファイルを追加/コミットするために、ブランチを作成することをお勧めします。
「GIT のコンテキストにおける追跡ファイルと追跡されていないファイルとは何ですか?「
- 追跡されたファイルは、最後のスナップショットにあったファイルです; 変更されていない、変更されている、またはステージングされている可能性があります。
- 追跡されていないファイルは、その他すべて、つまり、作業ディレクトリ内の最後のスナップショットに含まれず、ステージング領域(インデックス)にも含まれていないファイルです。
つまり、新しいファイルの場合、ステージング解除は追跡解除を意味します。
(ソース:プロGitブック、2.2Git の基本 - リポジトリへの変更の記録)
(ありがとう、ルイフィッシャー、アップデート/修正のためコメント欄)