Git 您如何在不暂存的情况下添加新文件?

Git 您如何在不暂存的情况下添加新文件?,git,staging,git-index,Git,Staging,Git Index,为了有效地使用git(如预期的那样),我进行了小的原子提交,而我有更长的会话,在这些会话中,我不仅改变了一件事。因此,我大量使用了gitadd-p。但是,这对完全新的文件不起作用,因为我以后会忘记它们 我想做的是,告诉git有一个新文件,我想让它跟踪,但不是转移它: 示例:运行git status生成: # On branch my-current-branch # Your branch is ahead of 'origin/my-current-branch' by 2 commits.

为了有效地使用git(如预期的那样),我进行了小的原子提交,而我有更长的会话,在这些会话中,我不仅改变了一件事。因此,我大量使用了
gitadd-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

在进行更改之前,可以使用该路径提交一个空文件。如果你已经在那里写了东西,把文件移走,创建一个空白文件,提交,然后像平常一样添加-p和
git commit--amend
,这样你就不会有“添加空白文件”提交了。

也许你可以试着编写一些预提交钩子,如果你有未跟踪的文件,它会提醒你。不过,这需要您始终保持git目录干净,才能正常工作(显然,您需要保持一个最新的.gitignore)


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

对于Git 2.5,
Git add-N/--意图添加实际上是正确的解决方案。
新文件不会成为下一次提交的一部分

见Nguyễn thai Ngọc Duy()(合并为):

diff lib.c
:调整diff中i-t-a条目的位置 问题: 由“
git add-N
”添加的条目是对用户的提醒,以便他们在提交之前不会忘记添加它们。这些条目出现在索引中,即使它们不是真实的。它们出现在索引中会导致混乱的“
git状态
”,如下所示:

如果执行“
git提交”
”,即使 “
状态
”将其报告为“
待提交”

解决方案: 此修补程序将输出更改为

这意味着:

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


我想如果我使用
add-N
它将已经被提交为空。但是,
--amend
解决方案意味着我将不得不记住这样做。这并没有完全忘记一个文件那么糟糕,但这意味着要搞乱以前的提交,这是我想要避免的。至少这是一个黑客,不是一个干净的解决方案。我不认为这是一个黑客。使用amend/rebase来清理未发布的历史记录没有什么错。你也可以将一些内容别名为“git add empty”之类的东西,这样就有了一个可重复的过程,但你不必记住它:8我建议你使用-N,但你在帖子中已经提到它对你不起作用!那么,我的建议是,通过保持GitIgnors的顶部,使“未跟踪文件”部分保持为空,这样,其中的任何新内容都会立即显现出来。@Robert:是的,我实际上有一堆GitIgnors,但我无法保持该部分完全干净,总是有一些垃圾,我的眼睛似乎已经习惯了不去看那个部分。我不认为git有选择去做你想做的事情。。。-N选项似乎是最接近的,但是如果您不想分段创建(这应该是无害的),那么除了使用未跟踪的文件之外,我看不到其他选项。我认为保持该部分的整洁是一个很好的做法——一切都是源文件或构建产品。我想建议
git add foo
+
git reset HEAD foo
,但结果是
reset
将新文件移回C部分,而不是像旧文件那样移回B部分。Grrr…注意:Git 2.5(2015年第2季度)现在使一个
Git add-N
成为一个可行的解决方案:参见
Git add-p
暗示
Git add-i
,但直接跳到选项
5:patch
git add-i
只要您每次执行
5:patch
时都检查选项
4:adduntracked
,就可以一直到那里。
foo: not added yet
error: Error building trees
On branch master
Changes to be committed:
        new file:   foo

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

no changes added to commit