如何在不进行暂存的情况下git添加新文件?

为了有效地使用git(并按预期使用),我做了一些小的原子提交,而我确实有更长的会话,在那里我不仅改变了一件事。 因此,我大量使用了git add -p。但是,这对于全新文件来说并不起作用,因为以后我会忘记它们。

我想做的是,告诉add -N,有一个新文件,我希望它跟踪而不是暂存它:

例如:运行add -N会产生:

# 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部分中有文件add -N,并且我说add -N,它将进入A部分。 如果我说git add -N foo,它将同时进入A和B。但是,这意味着它将被包含在下一次提交中,至少是存在新文件的事实。

我希望它专门在B节中使用,以便以后可以使用add -Nadd -N(或其他任何内容)将其添加到A中。

编辑

关于add -N解决方案,这是行不通的,因为如果我在说完add -N并且未正确添加后尝试提交,则git会抱怨,因为它不知道如何处理空文件:

foo: not added yet
error: Error building trees
bitmask asked 2020-08-05T09:57:22Z
3个解决方案
27 votes

使用Git 2.5,git diff HEAD实际上是正确的解决方案。
新文件将不属于下一次提交。

参见Nguyen Thai Ngoc Duy(git diff HEAD)(合并为d0c692263)的commit d95d728:

git diff HEAD:调整diff中i-t-a条目的位置

问题:

由“ git diff HEAD”添加的条目会提醒用户,以使他们在提交之前不会忘记添加它们。 即使它们不是真实的,这些条目也会出现在索引中。 它们在索引中的出现会导致令人困惑的“ git diff --cached HEAD”,例如:

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

Changes not staged for commit:
        modified:   foo

如果您执行“ git diff HEAD”,即使“ “ git diff”将其报告为“ to be committed”。

解:

此补丁将输出更改为

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

no changes added to commit

这意味着:

将这样的路径视为“尚未添加到索引,但是Git已经知道它们”; “ git diff HEAD”和“ git diff --cached HEAD”不应谈论它们,而“ git diff”应将它们显示为新的。 +文件尚未添加到索引。

VonC answered 2020-08-05T09:58:23Z
3 votes

也许您可以尝试编写一些预提交的钩子,如果您有未跟踪的文件,它们会提醒您。 但是,这将要求您始终保持git目录的干净运行(显然,您需要保持最新的.gitignore)。

还可以尝试git add -i,该功能类似于git add -p,但也具有用于添加新文件的界面。

asmeurer answered 2020-08-05T09:58:48Z
1 votes

您可以在进行更改之前使用该路径提交一个空文件。 如果您已经在此处写过东西,请将文件移开,制作一个空白文件,提交该文件,然后像平常一样添加-p并添加git commit --amend,这样就不必提交“添加空白文件”。

Daenyth answered 2020-08-05T09:59:08Z
translate from https://stackoverflow.com:/questions/11087143/how-can-you-git-add-a-new-file-without-staging-it