你如何git添加一个新的文件而不进行分期?

bit*_*ask 44 git staging git-index

为了有效地使用git(并且按照预期),我进行了小型的原子提交,而我确实有更长的会话,我不仅要改变一件事.因此,我大量使用git add -p.但是,这对于全新的文件不起作用,因为我以后往往会忘记它们.

我想要做的是,告诉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
Run Code Online (Sandbox Code Playgroud)

如果我foo在C部分有一个文件,我说git add foo它将转到A部分.如果我说git add -N foo它将同时转到A和B.但是,这意味着它将包含在下一次提交中,至少是因为存在新文件.

我想让它专门进入B部分,这样我以后可以用git add -pgit add foo(或其他)将它添加到A中.

编辑

关于add -N解决方案,这不起作用,因为如果我在说完之后尝试提交add -N并且没有正确添加它,git抱怨因为它不知道如何处理空文件:

foo: not added yet
error: Error building trees
Run Code Online (Sandbox Code Playgroud)

Von*_*onC 28

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

请参阅NguyễnTháiNgọcDuy()提交的d95d728pclouds(合并于d0c692263):

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

问题:

由" git add -N" 添加的条目是用户的提醒,以便他们在提交之前不会忘记添加它们.这些条目即使不是真实的,也会出现在索引中.他们在索引中的存在会导致git status像这样令人困惑的" ":

On branch master
Changes to be committed:
        new file:   foo

Changes not staged for commit:
        modified:   foo
Run Code Online (Sandbox Code Playgroud)

如果你做" git commit",foo即使" status"报告为" to be committed" ,也不会包括" ".

解:

此修补程序将输出更改为

On branch master
Changes not staged for commit:
        new file:   foo

no changes added to commit
Run Code Online (Sandbox Code Playgroud)

这意味着:

将这些路径视为"尚未添加到索引中,但Git已经了解它们"; " git diff HEAD"和" git diff --cached HEAD"不应该谈论它们,而" git diff"应该将它们展示为新的.+尚未添加到索引的文件.


Dae*_*yth 1

在进行更改之前,您可以使用该路径提交一个空文件。如果您已经在那里写入了内容,请将文件移走,创建一个空白文件,提交该文件,然后像平常一样添加 -p ,这样git commit --amend您就没有“添加空白文件”提交。

  • 我想如果我使用“add -N”,它已经被提交为空。然而,“--amend”解决方案意味着我必须记住这样做。这并不像完全忘记一个文件那么糟糕,但这意味着会弄乱以前的提交,这是我想避免的。至少这是一个黑客,而不是一个干净的解决方案。 (3认同)