或:git add ../README
添加顶层文件。
对于每个短格式表达式,都有一个长格式变体。虽然有一些没有简写的长格式变体。要使用长格式变量,请写一个冒号,然后是一个开放的括号 (
,接着是你想要的许多长格式名称,用逗号分隔。用 close parenthesis )
结束序列。2 例如,可以编写:(top,icase)readme
来表示工作目录顶部的名为 readme
、或 ReadMe
、或 README
、或任何其他疯狂混合大小写的文件。一些命令行解释器可能需要在带括号的表达式周围加上引号:git add ":(top,icase)readme"
。
在这种特殊情况下,空字符串与Git中的.
具有相同的含义。因此,:/:
或 :(top)
的意思与 :/:.
或 :(top).
相同。这命名了工作树中的每个文件3。在路径规范语法中省略终止的:
是可以的,因此 :/
也表示工作树中的每个文件。
1 现在-至少目前为止-只有两个其他特殊字符,!
和^
,它们都表示“排除”。 因此,使用冒号形式,您可以编写 :/
或 :^
或 :!
,或将它们与:/!
结合使用。
您可以在短格式后面用第二个冒号终止,即如果您想添加名为!
的文件,则可以编写:/:!
。路径规范:/!:!
的意思是不要添加位于树顶上的文件 !
;这只有在您指定添加多个顶部文件时才有意义,例如,git add :/!:! :/:.
将添加除顶层文件!
之外的所有文件。
2不要在长格式末尾再添加一个冒号。也就是说,:/:
正确,:(top)
正确,但是:(top):
是错误的!这会让我有时候混乱。
3 当然,通常适用于 .gitignore
规则。请记住,任何已跟踪 的文件-现在在索引中的任何文件-永远不会被忽略!
侧边栏:已删除的文件
据我回忆,Git 1.x 和 2.0 在对先前提交中存在的文件,目前被跟踪(即在索引中存在,可使用 git ls-files --stage
命令查看)但出于某种原因现在不在工作树中的文件处理方式上存在区别。
Git 2.0 的行为是,从工作树中删除的文件往往也会从索引中删除。例如,假设我们运行以下命令:
$ git checkout master
执行以下操作,我们将会在工作树中获得一个名为file
的文件,该文件是由master
分支上最新提交中的同名文件生成的:
git show master:file > file
$ rm file
这样file
就依然在索引中,但不再在工作树中。此时运行git status
会显示:
On branch master
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
deleted: file
no changes added to commit (use "git add" and/or "git commit -a")
现在各种形式的git add
都将从索引中删除文件file
,包括git add :/
以及git add file
:
$ git add :/
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
deleted: file
如果您不希望此移除操作被“添加”到索引中,您有多种选项,包括使用--ignore-removal
选项:
$ git reset --hard
HEAD is now at 29c2e68 initial
$ git add --ignore-removal :/
$ git status
On branch master
nothing to commit, working tree clean
所以,如果你正在使用:/
,但希望跳过更新(即删除)已删除的文件,请使用--ignore-removal
。在 Git 2.x 中,默认为“添加删除”。
git add :/
似乎只添加了那些已被修改的文件,而不是Git仓库中的所有文件,这似乎与这个答案所断言的":/
表示工作树中的每个文件"相矛盾。 - Hashim Azizgit add :/
是不好的实践。我认为因为git add :/
查找工作树中的每个文件,所以它也提交和推送所有这些文件。如果不是这种情况,那么就不会发送任何额外的数据,并且不应该有任何问题,因为它只有效地暂存、提交和推送修改后的更改,对吗? - Hashim Azizgit push
不会推送文件;它推送提交(然后根据需要携带文件)。除了运行git add :/
或git add -u
扫描哪些文件需要编写新的压缩图像所需的时间之外,与仅运行几个单独的git add
相比,没有真正的优势或劣势。 - torek