Git 提交文件而不转移

Git 提交文件而不转移,git,Git,我是Git新手,正在使用Git扩展。我想问一下,当我提交目录时,这些文件是自动进入暂存还是在没有暂存的情况下提交?? 是否可以在不暂存的情况下提交文件???是的,您可以在提交中使用a和m进行暂存和提交: git commit-am“我的提交消息” 但是,我还是倾向于使用git add-u,因为上面的命令不会暂存未跟踪的文件。这里值得一提的是,所有这些方法都使用索引,即暂存区,即缓存 当Git进行新的提交时,它使用“索引”中的任何内容进行提交。正如“索引”一词所暗示的那样,有一个单一的、特殊的、与

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

是的,您可以在提交中使用
a
m
进行暂存和提交:

git commit-am“我的提交消息”


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

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

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

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

未跟踪的文件是不在索引中的文件。其实很简单:任何不在索引中的文件都是未跟踪的;将跟踪索引中的任何文件。索引中的索引开始时与您放入工作树中的
git checkout
-ed相同

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

这有点麻烦,所以Git有
Git add-u
Git commit-a
。但这两种方法都只是看看现在索引中的内容,然后将它们的新工作树版本复制到索引中。因此,
git commit-a-m“commit message”
不会添加工作树中但不在索引中的文件,即当前未跟踪的文件。这与git add-u相同:只更新跟踪的文件

这里有点复杂 除上述内容外,
git commit
还可以将路径名作为参数:

git commit -m "some message" file1 file2
比如说。但这意味着
--only
标志,即仅提交
file1
file2
中的更改。您还可以运行:

git commit -m "some message" --include file1 file2
这将覆盖
——仅覆盖

所有这些工作的方式是Git可以使用不同的索引,而不是标准索引。当使用
--only
时,Git所做的是从
提交构建一个新的临时索引。然后,Git将指定的文件从工作树复制到这个临时索引中,替换旧版本或添加新文件。然后Git根据这个临时索引进行提交:新提交的文件与
提交的文件完全相同,除了由于
而添加的文件之外——只有file1 file2

当您使用
--include
时,Git通过复制当前索引而不是再次提取
头来创建其临时索引。所以现在,到目前为止,无论你有什么
git add
-ed都在临时索引中。然后Git添加指定的文件,并进行新的提交

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


如果您使用的是
--仅
,则这是最复杂的情况。在这里,Git也将添加的文件复制到实际索引中,但在其他方面,只保留实际索引。那样的话,无论你以前演过什么,现在都是上演的。新提交包含
头中的任何内容(通过临时索引),但指定的文件除外(这些文件是
git添加到临时索引中的)。而且,您刚才明确承诺的内容现在也会被
git add
-ed添加到实际索引中,就好像您在这些文件上运行了
git add

为什么要这样做
git add-u
将在一个命令中为您准备所有内容。在git中,可能存在重复项,您无法提交目录,只能提交文件。您可以使用@David_Tryon的答案轻松地为某些内容设置别名以完成您想要的操作。是的,类似于
git config--global alias.yabadabadoo!git add-u&&git commit-a
只会执行跟踪的文件?我的未跟踪文件不会被选择跟踪。不要(错误地)使用git作为一个鞭打容器。哇,非常全面。谢谢