64

我有两个简洁的问题:

  • 我如何跟踪文件但不暂存它们?
  • 如何在不取消跟踪的情况下取消暂存文件以进行提交?

注意: 我知道我可以进行初始提交以跟踪文件并从那里开始跟踪我的文件。但是可以具体做我上面问的吗?

我尝试使用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 fileAgit rm --cached fileA取消暂存它,但也会取消跟踪文件。这个命令git rm fileA建议我使用标志 -f 来删除文件。

那么,可以只跟踪而不是暂存,并且只能取消暂存而不是取消跟踪文件吗?

4

2 回答 2

57

更新(2015 年 5 月)

我尝试使用git add -N <expr>,但它会跟踪文件并将其添加以进行提交:

即将推出的 Git 2.5(2015 年第二季度)不再是这种情况。
请参阅“使用后文件未进入提交git add -N


原始答案(2013 年 3 月)

如何在不取消跟踪的情况下取消暂存文件以进行提交?

这是官方的方式:

git reset HEAD fileA

但由于它是一个新文件,您也可以取消跟踪它(将其从索引中删除,而没有任何先前的提交引用它)。

开始跟踪文件意味着将其置于索引(阶段)或提交中。

我建议为这些文件创建一个分支,以便在那里添加/提交它们。
请参阅“什么是 GIT 上下文中的跟踪文件和未跟踪文件?

  • 跟踪文件是上次快照中的文件;它们可以是未修改的、修改的或暂存的。
  • 未跟踪的文件是其他所有文件 - 工作目录中不在上一个快照中且不在暂存区域(索引)中的任何文件

这意味着,对于一个新文件,未暂存意味着取消跟踪它。

git中跟踪的文件
(来源:Pro Git Book,2.2 Git Basics - Recording Changes to the Repository
(感谢louisfischer评论中的更新/修复)

另请参阅“ git - 如何判断文件是否被 git 跟踪(通过 shell 退出代码)? ”。

于 2013-03-27T06:40:44.887 回答
1

使用 跟踪您的所有文件git add。提交您要提交的所有更改并推送到远程。然后用git stash. 您的文件将被跟踪但不提交。因此,在您的示例中,您将从取消暂存 fileA 开始。然后运行git add README.mdgit add composer.lockgit commit -m "Committing fun stuff.". git add fileA现在我们需要在不暂存的情况下跟踪新文件,所以我们只需执行git stash. 当您准备好提交 fileA 时,您可以运行git stash pop以提交/推送到远程。

于 2014-05-15T15:52:34.053 回答