我有两个文件未上演用于提交:
我想在一行中添加和提交B.java。最方便的方法是什么,比如一个班轮。
我知道git commit -am "Commit message"
,我需要为特定文件执行此操作
答案 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
。