提交没有登台的文件

时间:2013-03-01 15:46:39

标签: git

我是Git的新手,我正在使用Git扩展。我想问一下,当我提交目录时,这些文件是否会自动进行暂存,或者这些文件是否在没有登台的情况下提交? 我可以在没有登台的情况下提交文件吗?

2 个答案:

答案 0 :(得分:6)

是的,您可以在提交中使用am暂存和提交:

git commit -am "my commit message"

但是,我倾向于使用git add -u,因为上面的命令不会播放未跟踪的文件。

答案 1 :(得分:3)

这里值得一提的是,所有这些方法都使用索引,也就是暂存区域,即缓存。

当Git进行新的提交时,它会使用“索引”中的任何内容。正如索引所暗示的那样,有一个特殊的,区别的东西: 索引,而不是 索引。但事实上,Git可以使用一些其他索引。我们需要知道“ 的索引是什么,以及 索引与其他索引相比意味着什么。

简短版本是指数是Git用于构建下一次提交的索引。我们从提交中的内容开始,即当前或HEAD提交。你运行git checkout mastergit checkout branch或其他什么,Git用一堆文件填满你的工作树。它将相同的文件放入(单个,特殊,可分辨)索引中,也称为暂存区域。这意味着索引/暂存区域开始充满了许多文件:大多数情况下,工作树中的相同文件,您在哪里工作。例外情况是某些工作树文件可能未跟踪

未跟踪的文件是不在索引中的文件。它真的很简单:索引中的任何文件都是未跟踪的;跟踪索引中 的任何文件。索引中的那些与您git checkout编辑的那些开头相同,git checkout放在您的工作树中。

然后对一堆文件进行一系列更改。但是,如果您现在正在运行git commit,则索引/暂存区域仍具有原始git checkout版本,而不是修改后的工作树版本。因此,您必须git add将更改的文件复制到索引中。

这有点麻烦,所以Git有git add -ugit commit -a。但是这两个都只是看看索引中的内容,并将这些新的工作树版本复制到索引中。因此,git commit -a -m "commit message"不会在工作树中添加 的文件,但在索引中的不是,即当前未跟踪的文件。这与git add -u相同:只有跟踪的文件才会更新。

这里有点复杂

除上述内容外,git commit可以将路径名称作为参数:

git commit -m "some message" file1 file2
例如

。但这意味着--only标志,即file1file2中仅提交 更改。您也可以运行:

git commit -m "some message" --include file1 file2

这会覆盖--only

所有这些方法的工作方式是Git可以使用不同的索引,而不是标准索引。使用--only时,Git所做的是从HEAD提交构建一个新的临时索引。然后,在这个临时索引中,Git从工作树复制指定的文件,替换旧版本或添加新文件。然后Git从这个临时索引进行提交:新提交与HEAD提交具有相同的文件,但由于--only file1 file2而添加的内容除外。

使用--include时,Git通过复制当前索引而不是再次提取HEAD来创建临时索引。所以现在你所拥有的git add - 目前也在临时索引中。然后Git添加指定的文件,并进行新的提交。

在所有情况下,在Git进行新提交后,它也必须修复真实的索引,因为现在您已提交了最新的file1file2(如果您使用--include,可能还有其他更新。如果您使用--include,则临时索引将成为真正的索引。

如果你使用--only,这是最复杂的情​​况。在这里,Git也将添加的文件复制到真实索引中,但是否则只留下真正的索引。那样的话,无论你上演的是什么,都还在上演。除了指定的文件(HEAD - 加入临时索引)之外,新提交中包含git add提交(通过临时索引)中的任何内容。而且,您现在特别提交的内容现在也是git add - 真正的索引,就像您在这些文件上运行git add一样。