我注意到git允许直接提交被修改过的已跟踪文件,而不需要使用暂存区,例如:
$ git status -s .
M myfile.txt
$ git commit myfile.txt -m"1 way"
使用“经典”的两个步骤更好吗?
$ git add myfile.txt
$ git commit myfile.txt -m"2 way"
我注意到git允许直接提交被修改过的已跟踪文件,而不需要使用暂存区,例如:
$ git status -s .
M myfile.txt
$ git commit myfile.txt -m"1 way"
$ git add myfile.txt
$ git commit myfile.txt -m"2 way"
尝试使用 git commit -a -m [message]
-a
告诉命令自动暂存那些被更改或删除的文件,但是你未在Git中添加的新文件不受影响。
对于新文件不起作用,您仍然需要显式添加它们。
这只是一步中的暂存和提交。 我觉得这很方便,因为使用状态(status)
时可以看到所有更改的状态,而且我们通常会进行小的增量提交。
git commit
的文档提到了不少于5种方式来告诉Git你想在下一次提交中包含什么:
有这么多选项,不是因为其中一些选项“好”,而其他选项“更好”。Git 提供这么多选项是为了让你选择最适合特定情况的选项。例如,如果你发现有一个修改过的文件应该成为上一个提交的一部分(但你忘记提交它了),并且索引目前包含为下一个提交准备的文件,则使用问题中的第一个命令(上面列表中的选项#3)允许你仅提交该文件而不更改索引。这样,你错过的文件就跳过了线路,并在正确的位置提交,紧随上一个提交之后,而不会干扰你正在准备的下一个提交。可以通过以下几种方式指定要添加的内容:
- 使用
git add
命令在提交之前逐步"添加"更改到索引中(注意:即使修改的文件也必须"添加");- 使用
git rm
命令在提交之前从工作树和索引中删除文件;- 将文件列为提交命令的参数(不带
--interactive
或--patch
开关),此时提交将忽略在索引中暂存的更改,并记录当前列出的已知 Git 文件的内容;- 使用提交命令的
-a
开关自动“添加”所有已知文件中的更改(即所有已列在索引中的文件),并自动“rm”已从工作树中删除的文件,然后执行实际提交;- 使用提交命令的
--interactive
或--patch
开关,在最终操作之前逐个决定哪些文件或块应该包含在提交中,除了索引中的内容。请参阅git-add
的“互动模式”部分以了解如何操作这些模式。
git commit <paths>
有两种用法:git commit --only <paths>
和 git commit --include <paths>
。Git 实际上使用了一个临时索引/暂存区;--only
的意思是“从 HEAD
设置临时索引,然后将列出的文件放入其中”,而 --include
的意思是“从当前索引设置临时索引,然后将列出的文件放入其中”。 - torek