在不暂存文件的情况下进行Git提交

4

我注意到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"

可以提交“双向”更改,这是可以接受的。 - Gotti92
2个回答

8

尝试使用 git commit -a -m [message]

-a

告诉命令自动暂存那些被更改或删除的文件,但是你未在Git中添加的新文件不受影响。

对于新文件不起作用,您仍然需要显式添加它们。

这只是一步中的暂存和提交。 我觉得这很方便,因为使用状态(status)时可以看到所有更改的状态,而且我们通常会进行小的增量提交。


6
我应该使用“传统”的两步骤吗?git commit的文档提到了不少于5种方式来告诉Git你想在下一次提交中包含什么:

可以通过以下几种方式指定要添加的内容:

  1. 使用 git add 命令在提交之前逐步"添加"更改到索引中(注意:即使修改的文件也必须"添加");
  2. 使用 git rm 命令在提交之前从工作树和索引中删除文件;
  3. 将文件列为提交命令的参数(不带 --interactive--patch 开关),此时提交将忽略在索引中暂存的更改,并记录当前列出的已知 Git 文件的内容;
  4. 使用提交命令的 -a 开关自动“添加”所有已知文件中的更改(即所有已列在索引中的文件),并自动“rm”已从工作树中删除的文件,然后执行实际提交;
  5. 使用提交命令的 --interactive--patch 开关,在最终操作之前逐个决定哪些文件或块应该包含在提交中,除了索引中的内容。请参阅git-add 的“互动模式”部分以了解如何操作这些模式。
有这么多选项,不是因为其中一些选项“好”,而其他选项“更好”。Git 提供这么多选项是为了让选择最适合特定情况的选项。例如,如果你发现有一个修改过的文件应该成为上一个提交的一部分(但你忘记提交它了),并且索引目前包含为下一个提交准备的文件,则使用问题中的第一个命令(上面列表中的选项#3)允许你仅提交该文件而不更改索引。这样,你错过的文件就跳过了线路,并在正确的位置提交,紧随上一个提交之后,而不会干扰你正在准备的下一个提交。

1
请注意,git commit <paths> 有两种用法:git commit --only <paths>git commit --include <paths>。Git 实际上使用了一个临时索引/暂存区;--only 的意思是“从 HEAD 设置临时索引,然后将列出的文件放入其中”,而 --include 的意思是“从当前索引设置临时索引,然后将列出的文件放入其中”。 - torek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接