【问题标题】:Why doesn't git commit -a add new files?为什么 git commit -a 不添加新文件?
【发布时间】:2011-02-15 02:31:58
【问题描述】:

我对 git 有点陌生,我不明白为什么 git commit -a 只阶段更改和删除文件而不是新文件。

谁能解释为什么会这样,为什么没有其他提交标志来启用添加文件和提交in one command

顺便说一句,hg commit -A 将新文件和已删除文件都添加到提交中

【问题讨论】:

  • 你可能想问为什么它在 git 列表中。这可能是一个有用的功能,所以如果有人足够关心添加它。
  • 我猜没有git commit -A 因为 1.) 添加新文件比较少见;大多数其他 VCS 也需要明确的 scm add <file> 步骤 2。).gitignore 和类似文件并不完美,这可能会导致添加不需要的文件来提交。
  • 这绝对应该是默认的-a 行为

标签: git dvcs commit


【解决方案1】:

Git 是关于跟踪更改。它依赖于您告诉它哪些文件足够重要以进行跟踪。您可以像这样实现所需的效果:

git add . ;git commit -a

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

【讨论】:

  • -a 如果在存储库的根目录中完成,则它是多余的。基本上提问者需要
  • 不,-a 不是多余的。它确保删除也被分阶段。
  • 选项:1) 将命令组合成一个脚本并使用它来代替基本提交。 2) 提交功能请求。 3)检查源并自己添加功能。
  • 感谢您列出我的选项。我仍然对它还不存在的主要原因感兴趣。我是唯一一个想念它的人吗?我认为对于新手教程来说更重要 - “在这里,你看 - 我编辑了一个文件,现在在一个命令中我告诉 git 查看更改的内容并将其添加到存储库。”。我知道我可以编写一个脚本来完成它,但在编写教程或向某人展示 git 是多么简单和舒适时,这是一个糟糕的选择。我会尝试考虑提交请求。
  • 但该选项确实存在于 git add -A 中。我只想在 git commit 中有相同的选项,因为我知道自己在做什么。
【解决方案2】:

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

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

【讨论】:

  • 我不希望它成为默认值,但我希望它让我这样做。我可以做 git add .,那为什么不让我把它作为 git commit 命令的一部分呢?
【解决方案3】:

我建议另一种解决方案:使用 git commit --interactive -m "your commit message" 将显示此菜单

*** 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

允许您使用简单的按键检查​​状态、添加未跟踪的文件等。

【讨论】:

    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

      为了未来,你可以坚持使用Ian Clelland 的这个解决方案,

      git add -A && git commit -m "Your Message"
      

      因为它在评论中不会太明显 https://stackoverflow.com/a/2419270/5836034

      【讨论】:

        猜你喜欢
        • 2011-07-07
        • 2011-04-02
        • 2017-07-06
        • 2012-02-15
        • 1970-01-01
        • 2012-01-18
        • 2010-09-08
        • 2022-10-20
        • 1970-01-01
        相关资源
        最近更新 更多