【问题标题】:Add and commit a specific file in one line在一行中添加并提交特定文件
【发布时间】:2018-05-29 04:34:38
【问题描述】:

我有两个文件未暂存用于提交:

  • src/A.java
  • src/B.java

我想在一行中添加和提交 B.java。最方便的方法是什么,比如一个班轮。

我知道git commit -am "Commit message",我需要为特定文件

【问题讨论】:

标签: git


【解决方案1】:

您也可以运行:

git commit --only <paths>

(如果需要,添加 -m &lt;message&gt;),或者:

git commit --include <paths>

(如果需要,再次添加 -m &lt;message&gt;)。这 - 稍微简化一下 - 具有将指定路径添加到索引 (--include) 或临时索引 (--only) 的效果,然后使用您选择的索引与 --only--include 进行提交.

如果您使用--include,则成为当前分支上的新 HEAD 提交的已完成提交将自动由扩充索引表示。这种情况描述起来更简单:它确实像您拥有git added 这些文件一样工作,因为它带有任何早期的git added 文件。

如果您使用--only,则成为新 HEAD 的已完成提交表示的内容不一定在 正常 索引中。这种情况更复杂,因为索引通常应该代表 HEAD 提交(因此包含所有相同的文件),直到您启动 git adding 文件来覆盖索引版本。这里的内部细节是 Git 在新提交安全安装后将 --only 文件复制到常规索引。

保留过度简化(因为所有版本确实使用了一些特殊的临时索引文件),我们可以将其绘制为:

  • 正常提交:使用 索引作为所有提交文件的来源。提交完成后,索引仍然是索引,并且仍然包含所有文件。

    因此,如果您先git add fileA 然后git commit,则新提交具有新的fileA(以及与以前相同的旧的每隔一个文件)。索引和新的HEAD 提交匹配。

  • git commit --include &lt;file&gt;:很像git add,后跟git commit

    因此,如果您先git add fileA 然后git commit --include fileB,则新提交具有新的fileA 和新的fileB(以及与以前相同的旧的每隔一个文件)。索引和新的HEAD 提交匹配。

  • git commit --only &lt;file&gt;:将HEAD 提交复制到临时索引,将&lt;file&gt; 添加到临时索引,并使用临时索引运行git commit。成功后,将&lt;file&gt; 也添加到 索引中。

    因此,如果您先git add fileA 然后git commit --only fileB,则新提交具有 fileA(来自之前的HEAD 提交), fileB(来自临时索引),以及与以前相同的旧每隔一个文件。提交后的索引有新的fileA和新的fileB,所以提交后的索引与新的HEAD提交不同,因为它有不同版本的fileA

【讨论】:

    【解决方案2】:

    由于git commit -am会添加所有内容,所以你仍然需要先添加,然后提交,但至少可以在一行中完成

    git add src/B.java && git commit -m "add B"
    

    关键是,没有用于添加和提交一个文件(或修改文件的子集)的本地 Git 命令

    【讨论】:

      猜你喜欢
      • 2015-08-03
      • 2021-08-06
      • 1970-01-01
      • 1970-01-01
      • 2014-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-27
      相关资源
      最近更新 更多