Git 您如何在不暂存的情况下添加新文件?
为了有效地使用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.
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