【问题标题】:git commit -m vs. git commit -amgit commit -m 与 git commit -am
【发布时间】:2013-11-09 15:47:15
【问题描述】:

看起来很简单,但我就是不明白。我在我的应用程序的根目录中。

这是我的工作流程。

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 来捕捉这些。
  • @BotskoNet - 该文件是我的 Rails 应用程序中的 CSS 文件。出于某种原因,当我编辑该文件时,更改不会推送到 Heroku。这种情况以前发生过,我只是不明白为什么。
  • 也许这会对你有所帮助。 [两者不同][1] [1]:stackoverflow.com/a/15419846/3962576

标签: git github


【解决方案1】:

来自the docs

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

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

【讨论】:

  • 那么为什么git commit -am "x" 工作......但是...... git add . git commit -m "x" 不工作?
  • 因为您的某些文件没有暂存。这发生在当前未跟踪的已删除/添加的文件中。通常,您必须执行git add -u 才能暂存“未跟踪”文件。 -am 也会为你做这件事。
  • @slindsey3000 您可能正在寻找 git add -A 与 git add --all 相同,但与 git add 不同。
【解决方案2】:

我建议,如果您只更改了一个文件,那么您可以这样做:

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

【讨论】:

  • git commit -am 不推送,所以不能替换上面提到的三行。
  • @WilomGfx 我认为没有。他的意思是:你可以添加和提交而不是推送;所以他说的是对的:在一行上用这个命令
【解决方案3】:

它们的基本区别在于:

 git commit -m = send log message (don't work without git add )
 git commit -am = git add -a + git commit -m

和 git add -a = 阶段一切

【讨论】:

    【解决方案4】:

    git commit -m "first commit" 和 git commit -am "your first commit" 的区别在于,在前者中,您需要先执行“git add”。而你在后者中不需要它。 “-am”标志中的“a”告诉 git 首先添加所有更改

    【讨论】:

      【解决方案5】:

      git commit -am 是一个方便的命令,可以为 TRACKED(=STAGED) 文件一次性暂存和提交。

      正如钉子回答的那样,

      git commit -am = git commit -a + git commit -m 
      

      git commit -m:commit with message(这部分你可能知道)

      git commit -a | git commit --all:

      告诉命令自动暂存已修改和删除的文件,但您没有告诉 Git 的新文件不受影响。 -来自 git 文档

      你没有告诉 Git 的新文件不受影响

      粗体部分很重要。

      -am 标志仅适用于 TRACKED(暂存)已修改或删除的文件(b/c“删除”表示删除存在的文件 = 之前跟踪的文件)

      因此,如果您添加新文件并使用-am 标志提交,则那些新创建的文件将不会包含在提交中,因为它没有被跟踪(暂存)。

      如果您创建新文件并想使用-am 标志来避免使用

      git add .
      git commit -m "some commit" // reducing one line makes a big difference, I agree
      

      ,首先使用git add . 暂存这些新的,您可以使用git commit -am 代替上面两行的命令。

      【讨论】:

        【解决方案6】:

        它同时做 2 份工作 1)暂存修改后的文件 2)在同一行添加注释

        但它不会将文件从 unstage 添加到 stage,即它无法完成 $git add 的工作。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-01-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-12-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多