为什么git commit -a不能添加新文件?

45

我对git还比较陌生,不太明白为什么git commit -a只会将更改和删除的文件存入暂存区,而不包括新添加的文件。

是否有人能够解释一下为什么会这样,并且为什么没有其他的提交标志可以在一次命令中同时添加文件并提交,参考这里?

另外,hg commit -A则会将新添加和删除的文件都加入到提交中。


1
你可能想问为什么它在git列表中。这可能是一个有用的功能,如果有人足够关心去添加它的话。 - xenoterracide
我猜没有git commit -A是因为:1.) 添加新文件相对较少见;大多数其他版本控制系统需要显式的scm add <file>步骤。2.) .gitignore和类似的文件并不完美,这可能会导致将不想提交的文件添加到提交中。 - Jakub Narębski
2
这绝对应该是默认的 -a 行为。 - juliangonzalez
5个回答

28

Git是用来跟踪 更改 的。 它依靠您告诉它哪些文件很重要需要跟踪。您可以像这样实现所需的效果:

git add . ;git commit -a

确保你的.gitignore文件已更新。


1
如果在代码库的根目录中执行,则-a参数是多余的。基本上问题提问者需要的是什么? - xenoterracide
4
不,-a 不是多余的。它确保了删除的内容也被提交至暂存区。 - CB Bailey
2
选项:1)将命令组合成脚本并使用它来代替基本提交。2)提交一个功能请求。3)检出源代码并自己添加该功能。 - Kelly S. French
3
谢谢列出我的选项。我仍然对它为什么还不存在的主要原因感兴趣。难道只有我一个人错过了它吗?我认为这对于新手教程来说更加重要——“在这里,你看到——我编辑了一个文件,现在我只需要一个命令告诉git查看被更改的内容并将其提交到仓库中。”我知道我可以编写一个脚本来完成这个操作,但在编写教程或向别人展示git有多么简单和方便时,那是个不好的选择。我将尝试提交请求。 - splintor
1
一个命令 git add -A && git commit 有什么问题吗?我的意思是,如果存在的话,git commit -A 会有什么优势?(除了少打几个字符之外)。我认为它不存在的原因(如果不仅仅是因为可以像上面提到的那样轻松完成)是,99% 的项目都有至少一个不属于 SCM 存储库的文件,例如配置文件或跟踪数据库版本的文件等。 - Pelle
显示剩余8条评论

14

我建议另一种解决方案:使用git commit --interactive -m "您的提交消息"将显示此菜单。

*** Commands ***
  1: [s]tatus     2: [u]pdate     3: [r]evert     4: [a]dd untracked
  5: [p]atch      6: [d]iff   7: [q]uit   8: [h]elp

通过简单的按键,可以允许您检查状态、添加未被跟踪的文件等。


10

我猜答案很简单(但我怀疑我说出来后可能不会受欢迎!)-- 除了开发人员实施时它是如何掉出来的,很可能没有刻意的“为什么”。Git项目的优先级从来不是易用性或用户友好性。


6

Kelly说得没错,但我认为另一个因素是许多人期望这种行为,因为CVS、Subversion和大多数其他工具都是这样做的。

如果Git提交了新文件,你可能会注意到很久以前你已经提交了.o文件,更糟糕的是它们可能会影响构建。


3
我不希望它成为默认选项,但我希望它能够让我这样做。我可以使用"git add .",那么为什么不允许我将其作为"git commit"命令的一部分来完成? - splintor

5

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