git commit -m与git commit -am


78

看起来很简单,但是我不明白。我是我应用程序的根源。

这是我的工作流程。

git add .
git commit -m "added a new feature some files changed"
git push heroku master

这通常有效。我所有的更改都已推送。

但是有时候我有一个要更改的文件,但是当我将其推送到Heroku时,那个文件没有更改...但是对于大多数文件,更改都存在...

但是如果我这样做

git add .
git commit -am "added a new feature some files changed"
git push heroku master

一切(所有更改)都推送到Heroku


您能举例说明哪个文件没有被捕获吗?它是您删除的文件吗?有时,您需要做git add . --update一些捕捉这些事情。
helion3 2013年

@BotskoNet-该文件是我的Rails应用程序中的CSS文件。由于某些原因,当我编辑该文件时,更改不会推送到Heroku。这以前发生过,我只是不明白为什么。
slindsey3000

也许这会对您有所帮助。[不同之处] [1] [1]:stackoverflow.com/a/15419846/3962576
Reven

Answers:


83

文档

git commit -a在提交之前自动暂存所有已跟踪的,已修改的文件如果您认为工作流程的git add阶段太麻烦,Git允许您使用-a选项跳过该部分。这基本上告诉Git在任何“被跟踪”的文件上运行git add,也就是说,在您的上一次提交中并且已被修改的任何文件。这样,您可以根据需要执行更多的Subversion样式工作流程,只需编辑文件,然后在要快照已更改的所有内容时运行git commit -a。但是,您仍然需要运行git add来开始跟踪新文件,就像Subversion一样。

使用该选项-am,您可以在一个命令中为提交添加和创建消息。


2
那么为什么git commit -am "x"起作用……但是……git add . git commit -m "x"不起作用?
slindsey3000

13
因为您的某些文件未暂存。对于当前未跟踪的已删除/添加的文件,会发生这种情况。通常,您必须执行git add -u才能暂存“未跟踪”文件。 -am也会为您做到这一点。
戴文·崔顿

3
@ slindsey3000您可能正在寻找git add -A与git add --all相同,这与git add不同。
亚历山大·米尔斯

19

我建议,如果只更改一个文件,则可以执行以下操作:

git add "Your_file.txt"
git commit -m "added a new feature in a file"
git push heroku master

或者,如果您更改了多个文件,则可以执行以下操作:

git add .
git commit -m "some files changed"
git push heroku master

同样,您可以使用以下命令在一行上添加并提交所有文件:

git commit -am "added a new feature some files changed"
git push heroku master

5
git commit -am不会推送,因此您无法替换上述三行。
WilomGfx

3
@WilomGfx我认为没有。他的意思是:您可以添加和提交而不是推送;所以他说的没错:在此命令的一行上
robe007
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.