你怎么可以添加一个新的文件,而不分期呢?

要有效地(和按照预期)使用git,我做了小的primefaces提交,而我确实有更长的会话,在那里我不仅改变了一件事情。 因此,我大量使用git add -p 。 尽pipe这对于全新的文件不起作用,因为我以后往往会忘记它们。

我想要做的就是告诉git有一个新的文件,我希望它跟踪,但不是阶段

例如:运行git status会产生:

 # On branch my-current-branch # Your branch is ahead of 'origin/my-current-branch' by 2 commits. # # Changes to be committed: # <<STAGED SECTION>> // A # # 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) # <<UNSTAGED-YET-KNOWN SECTION>> // B # # Untracked files: # (use "git add <file>..." to include in what will be committed) # <<UNKNOWN SECTION>> // C 

如果我在C部分有一个文件foo ,并且我说git add foo它会转到A部分。 如果我说git add -N foo它将会同时到A和B.但是,这意味着它将被包括在下一个提交,至less有一个新的文件的事实。

我希望它在B部分专门去,这样我可以稍后将它添加到与git add -pgit add foo (或其他)。

编辑

关于add -N解决scheme,这是行不通的,因为如果我试图提交后说 – add -N没有正确添加它,git抱怨,因为它不知道如何处理空文件:

 foo: not added yet error: Error building trees 

使用Git 2.5, git add -N/--intent-to-add实际上是正确的解决scheme。
新文件不会成为下一次提交的一部分。

见NguyễnTháiNgọcDuy 提交的d95d728 ( pclouds )(合并于d0c692263 ):

diff-lib.c :在diff中调整ita条目的位置

问题:

由“ git add -Ngit add -N条目提醒用户,以便他们不要忘记在提交之前添加它们。 这些条目即使不是真实的,也会出现在索引中。 他们在指数中的存在导致了这样一个令人困惑的“ git status ”:

 On branch master Changes to be committed: new file: foo Changes not staged for commit: modified: foo 

如果你做了一个“ git commit ”,即使“ status ”报告为“ git commit ”,也不会包含“ foo ”。

解:

这个补丁改变了输出

 On branch master Changes not staged for commit: new file: foo no changes added to commit 

这意味着:

对待“尚未join索引但Git已经知道他们”的path; “ git diff HEAD ”和“ git diff --cached HEAD ”不应该谈论它们,而“ git diff ”应该将它们显示为新的。 +文件尚未添加到索引。

也许你可以尝试写一些预先提交的钩子,如果你有未跟踪的文件提醒你。 这将需要你始终保持你的git目录干净的工作,但(显然你需要保持一个最新的.gitignore)。

也可以尝试git add -i ,它与git add -p类似,但也有一个添加新文件的界面。

在进行更改之前,可以使用该path提交一个空文件。 如果你已经在那里写了东西,移走文件,创build一个空白文件,提交,然后添加-p作为正常和git commit --amend所以你没有“添加空白文件”提交。