当你修改工作目录中的文件时,git会告诉你使用“git add”来暂存。当你向工作目录中添加一个新文件时,git会告诉你使用“git add”来开始跟踪。我对这两个概念有点困惑,因为我假设跟踪文件的更改与暂存它以提交是不同的
pu3pd22g1#
Git在本地仓库中的文件基本上有4种主要状态:
***untracked:**文件是新的,Git对它一无所知。如果你git add <file>,它变成:***staged:**现在Git知道文件(被跟踪),但也将其作为下一个提交批次的一部分(称为 index)。如果你git commit,它将变成:***unchanged:**文件自上次提交后没有发生变化,如果 * 修改 *,则变为:***unstaged:**已修改,但尚未成为下一次提交的一部分,可以使用git add再次stage
git add <file>
git commit
git add
正如您所看到的,git add将跟踪未跟踪的文件,并暂存任何文件。
git rm --cached filename
git reset HEAD <file>
nlejzf6q2#
Git有一个被称为“索引”的概念。要创建一个新的提交,你需要用你希望在下一次提交中包含的内容填充索引。这意味着你必须使用git add显式地告诉Git你希望在下一次提交中出现哪些更改。(git add -p只添加单个块)无论你是只更新一个文件(»stage changes«)还是添加一个新文件的完整内容(»start tracking a file«),Git都不会有什么区别--这两种情况下,Git的索引看到的都是添加的新更改
git add -p
tyu7yeag3#
当您添加文件以开始跟踪时,它还会暂存其内容。如果要添加要跟踪的文件而不暂存该文件,可以使用
git add -N
8mmmxcuj4#
您确定的这两个git add步骤本质上做的是相同的事情,只是由于它们的到达路线不同而有不同的解释。git add只是告诉git,提供的文件是您希望拥有的文件,并且是当前格式的文件(它的内容),在它的源代码控制仓库中。在这一点上,git将采取文件的快照(并且它在索引中保留一个注解),以便在您准备好并添加对文件的所有更改时使用(即在暂存区域中编组在一起),对于您的git commit(带有适当的消息;- ).一旦git被告知该文件(例如@avh的-N选项)它会注意到在各种命令的伪装下(跟踪)对文件的更改(比如git status)。因此,稍后,当您不再希望跟踪某个文件时,您必须显式地告诉git(git rm <file>),然后可以继续编辑文件(在本地)在你已经add艾德了提交中的版本之后。(或者也许不是),您可以在提交最终版本之前多次git add文件。
-N
git status
git rm <file>
add
prdp8dxp5#
让我来解释一下Git的三树架构,它包括一个工作目录、一个暂存索引和一个存储库:
当我们将一个文件从工作目录移动到暂存索引时,git开始跟踪更改,表明该文件已暂存(在暂存索引中),并且因为它也在跟踪更改,所以我们可以说该文件已被跟踪。暂存索引中跟踪的文件和仓库中跟踪的文件是有区别的,当更改提交到仓库时,它们会成为仓库历史的一部分,而暂存索引中的更改不会影响git历史。
5条答案
按热度按时间pu3pd22g1#
Git在本地仓库中的文件基本上有4种主要状态:
***untracked:**文件是新的,Git对它一无所知。如果你
git add <file>
,它变成:***staged:**现在Git知道文件(被跟踪),但也将其作为下一个提交批次的一部分(称为 index)。如果你
git commit
,它将变成:***unchanged:**文件自上次提交后没有发生变化,如果 * 修改 *,则变为:
***unstaged:**已修改,但尚未成为下一次提交的一部分,可以使用
git add
再次stage正如您所看到的,
git add
将跟踪未跟踪的文件,并暂存任何文件。git rm --cached filename
取消跟踪未提交的文件,并使用git reset HEAD <file>
取消暂存文件 *nlejzf6q2#
Git有一个被称为“索引”的概念。要创建一个新的提交,你需要用你希望在下一次提交中包含的内容填充索引。这意味着你必须使用
git add
显式地告诉Git你希望在下一次提交中出现哪些更改。(git add -p
只添加单个块)无论你是只更新一个文件(»stage changes«)还是添加一个新文件的完整内容(»start tracking a file«),Git都不会有什么区别--这两种情况下,Git的索引看到的都是添加的新更改
tyu7yeag3#
当您添加文件以开始跟踪时,它还会暂存其内容。
如果要添加要跟踪的文件而不暂存该文件,可以使用
8mmmxcuj4#
您确定的这两个
git add
步骤本质上做的是相同的事情,只是由于它们的到达路线不同而有不同的解释。git add
只是告诉git,提供的文件是您希望拥有的文件,并且是当前格式的文件(它的内容),在它的源代码控制仓库中。在这一点上,git将采取文件的快照(并且它在索引中保留一个注解),以便在您准备好并添加对文件的所有更改时使用(即在暂存区域中编组在一起),对于您的git commit
(带有适当的消息;- ).一旦git被告知该文件(例如@avh的
-N
选项)它会注意到在各种命令的伪装下(跟踪)对文件的更改(比如git status
)。因此,稍后,当您不再希望跟踪某个文件时,您必须显式地告诉git(git rm <file>
),然后可以继续编辑文件(在本地)在你已经add
艾德了提交中的版本之后。(或者也许不是),您可以在提交最终版本之前多次git add
文件。prdp8dxp5#
让我来解释一下Git的三树架构,它包括一个工作目录、一个暂存索引和一个存储库:
当我们将一个文件从工作目录移动到暂存索引时,git开始跟踪更改,表明该文件已暂存(在暂存索引中),并且因为它也在跟踪更改,所以我们可以说该文件已被跟踪。
暂存索引中跟踪的文件和仓库中跟踪的文件是有区别的,当更改提交到仓库时,它们会成为仓库历史的一部分,而暂存索引中的更改不会影响git历史。