你怎么可以添加一个新的文件,而不分期呢?
要有效地(和按照预期)使用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 -p
或git 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 -N
”git 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
所以你没有“添加空白文件”提交。