git add只将未跟踪的文件或已修改的文件添加到暂存区吗?

时间:2019-09-03 12:36:41

标签: git

我是Git的新手,假设我一次创建了10个文件,然后将这10个文件添加到舞台区域,然后提交了它们。

然后我创建了另一个文件(第11个文件),因为该文件的名称很长,所以我不想键入git命令

  

git add lllllllllllllongname.txt

我输入:

  

git add。

git还会在内部再次将第一次创建的那10个文件重新添加到暂存区吗? 因为我检查了Git文档,不是说add命令只会将未跟踪的文件或修改过的文件添加到暂存区吗?

4 个答案:

答案 0 :(得分:0)

使用git add .时,git 会将具有更改的文件添加到登台区域。

如果在初始暂存后编辑或添加了新文件,则这些更改将在下一阶段添加。承诺在这方面没有什么区别,但会使分期变得更加困难。

答案 1 :(得分:0)

If you create 10 files first (1.txt,2.txt...…,10.txt) then commit all as below

git add .
git commit "commit message"
git status

如果您执行git status,那么您看不到它。

然后,当您创建下一个文件(即11.txt)时,现在如果执行git status,则只会看到您最近创建的一个文件,因此再次执行上述3条命令,您将意识到只有一个文件是添加用于提交,即11.txt

git add . 
git status
git commit "commit message"
git status

答案 2 :(得分:0)

git add documentation for pathspec描述了git在添加目录时的行为。

  

git add [options…] [<pathspec>…]

     

...

     

…还可以指定一个前导目录名称(例如,添加dirdir/file1的{​​{1}},以更新索引以匹配整个目录的当前状态(例如,指定dir/file2不仅会记录在工作树中修改的文件dir,还会记录向工作树添加的文件dir/file1,而且还会记录从工作树中删除的文件dir/file2 )。请注意,旧版的Git曾经忽略已删除的文件。如果要添加修改的文件或新文件,而忽略已删除的文件,请使用dir/file3 [或--no-all]选项。

在您的情况下,并假设使用git的最新版本,--ignore-removal将在当前目录子树中暂存以下任何更改

  • 新文件
  • 修改后的文件
  • 已删除的文件

对于已经暂存的更改,这些文件不会显示为已修改,因为工作树中的内容将与索引或暂存区域中的内容相同。


默认情况下,将阶段删除文件更改为version 2.0.0

  

git add .现在与git add <path>相同,因此   git add -A <path>会注意到您从目录中删除的路径,   记录删除。在旧版Git中,使用git add dir/   忽略删除。您可以说git add <path>来   如果您确实愿意,仅在 path 中添加添加或修改的路径。

答案 3 :(得分:0)

这里重要的是,登台区域已经包含了您的所有文件

如果您的存储库不是太大,请尝试运行:

git ls-files --stage

如果您的存储库中有很多文件,这将产生大量的输出。仍然只是 looking 的一种情况,所以还可以,但是您可能希望通过分页器通过管道传递输出-git ls-files不是日常使用的Git命令,因此它不是self -分页,例如git loggit diff

git status说:

On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean

您的暂存区包含许多文件!重要的是,现在暂存区域中的内容与其他两个区域中的每个内容都相同。

请记住,Git每次都有每个跟踪文件的三个副本。假设您跟踪的文件之一名为README.md。它在您的工作树中,您可以在其中看到它并对其进行操作。但是有三个副本!

  • HEAD:README.md,它是当前提交中冻结的已提交文件。使用git show HEAD:README.md进行查看。

  • 然后在您的暂存区中有README.md。使用git show :README.md进行查看。该文件的副本采用冻结的 format 格式,就像您当前提交中的那个一样,但是与您当前提交中的那个不同,您可以通过将其批量替换为您当前提交中的一个来进行更改工作树。

  • 最后,有README.md,您可以查看并使用。您不需要任何特殊命令即可显示它,因为它只是一个普通文件。

当您运行git commit时,Git会采用文件暂存区副本中的任何内容并将其冻结为您所做的 new 提交。因此,如果您更改了README.md工作树副本,但未触及 staging 副本,那么下一个git commit将使用旧的未更改的临时副本。如果希望它使用新的,请运行git add工作树复制到临时区域。这会将更新后的README.md压缩为冻结格式,准备提交。它实际上尚未落实,已经准备就绪。

如果重新添加未更改的文件,Git将看到更新的冻结格式文件仍与原始冻结格式文件相同,已经在HEAD提交中并且已经在暂存中区域。是否将未更新的文件复制到暂存区域中的未更新,仍相同,仍可使用的文件中,都没有关系。

实际上,登台区域是您的建议的下一次提交。它开始与您的当前提交匹配。如果您重新添加文件,那将是无害的:它们没有被更改,因此它们仍然与您当前的提交匹配,或者已被更改,但是您仍然希望在建议的下一次提交中对其进行更改。

唯一想要git add的特定文件是在工作树中对其进行更改时,但是您想要:

  • 将其保留在登台区域中 不变,或者
  • 将其完全保留或保留在临时区域的 中,以便下次提交时将不存在。

如果文件README.md在您的当前提交中,并且您将其存放在暂存区域的 中,则该文件不在您的 next中提交,那么无论如何,在Git看来,您已经删除了README.md。是否已删除工作树中的README.md并不重要。该工作树不适用于 Git ,适用于 you 。您可以在工作树中查看和使用文件。 Git使用暂存区副本进行 next 提交,而已提交的副本(每个 提交中都有一个)用于已提交的副本。