-->

你怎么能的Git添加新的文件而不分段呢?(How can you git add a new fil

2019-07-29 23:57发布

为了有效地使用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

如果我有一个文件foo在C段,和我说git add foo将进入A部分。 如果我说git add -N foo将进入A和B两种然而,这将意味着它会列入下次提交,至少一个事实,即有一个新的文件。

我希望它在B节专门去,这样我可以在以后用它添加到git add -p或者git add foo (或其他)。

编辑

关于add -N解决方案,这并不因为如果我尝试话说回来之后提交的工作add -N没有添加得当,git的抱怨,因为它不知道如何处理空文件:

foo: not added yet
error: Error building trees

Answer 1:

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

见提交d95d728由玉维战阮泰( pclouds )(合并在d0c692263 ):

diff-lib.c :调整在DIFF ITA条目的位置

问题:

添加有“条目git add -N ”是提醒用户,让他们不要忘记提交之前将它们添加。 这些条目出现在索引中,即使他们是不是真实的。 他们在指数存在导致混乱“ git status ”是这样的:

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

Changes not staged for commit:
        modified:   foo

如果你做一个“ git commit ”,“ foo ”将不包括即使“ status ”报告为“ to be committed ”。

解:

这个补丁改变输出成为

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

no changes added to commit

这意味着:

对待这样的路径为“尚未被添加到索引,但混帐已经了解他们”; “ git diff HEAD ”和“ git diff --cached HEAD ”不应该谈论他们,“ git diff ”应该向他们展示如新。 +文件尚未添加到索引。



Answer 2:

也许你可以尝试写一些pre-commit钩子,可以提醒你,如果你有未跟踪文件。 这就要求你要始终保持你的git目录的清洁工作,但(显然你需要保持了最新的.gitignore)。

也可以尝试git add -i这是类似git add -p而且对于添加新文件的接口。



Answer 3:

你可以让你的更改之前提交与路径的空文件。 如果你已经写的东西在那里,将文件移动了,做一个空白文件,提交的是,再加入-p正常和git commit --amend所以你不要有一个“添加空白文件”提交。



文章来源: How can you git add a new file without staging it?