在一行

时间:2018-05-29 04:34:38

标签: git

我有两个文件未上演用于提交:

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

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

我知道git commit -am "Commit message" ,我需要为特定文件执行此操作

2 个答案:

答案 0 :(得分:3)

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

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

重点是,没有用于添加和提交仅一个文件(或修改文件的子集)的本机Git命令

答案 1 :(得分:3)

您也可以运行:

git commit --only <paths>

(如果需要,添加-m <message>)或:

git commit --include <paths>

(如果需要,再次添加-m <message>)。这个 - 过度简化它 - 具有将指定路径添加到索引(--include)或临时索引(--only)的效果,然后使用您选择的索引{{1 }} vs --only

如果使用--include,则在当前分支上成为新HEAD提交的已完成提交将由扩充索引自动表示。这个案例更容易描述:它确实可以像--include编辑这些文件一样工作,因为它带有任何早期的git add ed文件。

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

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

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

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

  • HEAD:行为很像git commit --include <file>后跟git add

    因此,如果您git commit然后git add fileA,则新提交会有新的git commit --include fileB和新的fileA(以及相同的旧的每个其他文件之前)。索引和新fileB提交匹配。

  • HEAD:将git commit --only <file>提交复制到临时索引,将HEAD添加到临时索引,然后使用临时索引运行<file>。成功时,还会将git commit添加到 索引。

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