是的,您可以在提交中使用a和提交阶段和m提交:
git commit -am "my commit message"
但是,我倾向于使用git add -u,因为上面的命令不会分段未跟踪的文件.
这里值得一提的是,所有这些方法都使用索引,也就是暂存区,也就是缓存。
当 Git 进行新的提交时,它会使用“索引”中的任何内容。正如那句指数暗示,有一个单一的,特殊的,杰出的事:该指标,而不是一个指标。但实际上,Git 可以使用其他一些索引。我们需要知道“the”索引是什么,以及作为索引与其他索引相比意味着什么。
简而言之,索引是 Git 用来构建下一次提交的。我们从这次提交中的内容开始,即当前或HEAD提交。你运行git checkout master或git checkout branch其他什么,Git 用一堆文件填满你的工作树。它将相同的文件放入(单一、特殊、区分)索引中,也称为暂存区。这意味着索引/暂存区开始时充满了许多文件:大多数是您工作树中的相同文件,您工作的地方。例外是某些工作树文件可能未被跟踪。
一个未经跟踪的文件是一个不在索引中。就这么简单:任何不在索引中的文件都不会被跟踪;任何文件是在指数跟踪。索引中的那些与您在工作树git checkout中git checkout放置的那些相同。
然后,您对一堆文件进行了一系列更改。git commit但是,如果您现在运行,索引/暂存区域仍然具有原始git checkout版本,而不是修改后的工作树版本。因此,您必须git add将更改后的文件复制到索引中。
这有点麻烦,所以 Gitgit add -u和git commit -a. 但是这两者都只是查看索引中的内容,然后将这些新的工作树版本复制到索引中。因此,git commit -a -m "commit message"不添加文件是在工作树,但不是在索引即,目前未跟踪文件。这与git add -u:仅更新跟踪的文件相同。
除上述之外,git commit还可以将路径名作为参数:
git commit -m "some message" file1 file2
Run Code Online (Sandbox Code Playgroud)
例如。但这意味着--only标志,即,仅提交file1和 中的更改file2。您还可以运行:
git commit -m "some message" --include file1 file2
Run Code Online (Sandbox Code Playgroud)
这将覆盖--only.
所有这些工作的方式是 Git 可以使用不同的索引,而不是标准的索引。使用 时--only,Git 所做的是从HEAD提交中构建一个新的临时索引。然后,在这个临时索引中,Git 从工作树中复制指定的文件,替换旧版本或添加新文件。然后 Git 从这个临时索引进行提交:新提交具有与HEAD提交相同的所有文件,除了由于--only file1 file2.
当您使用 时--include,Git 通过复制当前索引而不是HEAD再次提取来创建其临时索引。所以现在你已经git add-ed 到目前为止也在临时索引中。然后 Git 添加指定的文件,并进行新的提交。
在所有情况下,在 Git 进行新的提交之后,它也必须修复真正的索引,因为现在您已经提交了最新的file1和file2(如果您使用了,可能还有其他更新--include)。如果你使用了--include,临时索引就会变成真正的索引。
如果您使用--only,这是最复杂的情况。此时,Git 也将添加的文件复制到实际索引中,否则将单独保留实际索引。这样,您之前上演的任何内容仍然是上演的。新提交中包含提交中的任何内容HEAD(通过临时索引),除了指定的文件(被git add-ed 到临时索引中)。而且,您刚才特别提交的任何内容现在也被git add-ed 到真正的索引中,就好像您git add在这些文件上运行一样。
| 归档时间: |
|
| 查看次数: |
6335 次 |
| 最近记录: |