git add和git commit -a之间的区别

时间:2017-07-24 20:56:43

标签: git github

我想更好地理解git是如何工作的。

所以我们有一个工作目录(我们的项目文件),一个临时区域(一组准备好的变化)和一个git存储库(这些更改在提交时应用于这些)。

但是我很难理解,因为看起来文件被“跟踪”或没有引用某些特定的东西,但我们仍然说每个部分都有自己的跟踪形式?

说:

是否正确
  1. 如果我在工作目录中添加或修改文件,git会检测到所有这些。我们是否说过这些文件被git“跟踪”了?或者他们只是“被发现”(或其他)?是否“跟踪”项目文件夹/工作目录中的所有内容?

  2. git add {directory or filename}似乎将内容添加到暂存区域,是吗?在这一点上,我们说所有分阶段文件都是“跟踪”文件,那些在我们git ls-files时显示的文件,我相信这些文件显示在暂存区域中的文件?还是不?

  3. git commit -a将暂存区域中的所有更改移至存储库。

  4. 这是对的吗?

2 个答案:

答案 0 :(得分:0)

git add添加要跟踪的文件以及暂存(当前提交)

git commit -a如果已经跟踪

,则会将文件添加到暂存

Git会在将这些文件添加到repo目录时注意到未跟踪的文件,因为它将它们理解为文件更改。但除非您明确将它们添加到跟踪中,否则它不会跟踪任何更改增量

这个问题可能会对您有所帮助:Concept of git tracking and git staging

另见https://www.howtogit.net/concepts/types-of-changes.html

我认为我们混淆的主要问题是git add可以做两件事(如果没有,则添加到跟踪和舞台),而git commit -a只做一件(将跟踪文件添加到舞台)

答案 1 :(得分:0)

  
      
  1. 如果我在工作目录中添加或修改文件,git会检测到所有这些。我们是否说过这些文件被git“跟踪”了?或者他们只是“被发现”(或其他)?项目文件夹/工作目录中的所有内容都“已跟踪”吗?
  2.   

Git检测已修改和已删除的文件。如果它们被跟踪(即它们在之前添加并已提交),它们将在git status的输出中显示为“已修改”。未跟踪的新文件和修改后的文件显示为“未跟踪”。

  
      
  1. git add {directory or filename}似乎将内容添加到暂存区域,是吗?在这一点上,我们说所有分阶段文件都是“跟踪”文件,那些在我们git ls-files时显示的文件,我相信这些文件显示在暂存区域中的文件?还是不?
  2.   

暂存区域用于准备下一次提交。你可以说它包含的文件是“被跟踪的”,但它的内容不是永久性的;它可以随时更改。为了让Git真正“跟踪”新文件,您必须提交分阶段更改。

  
      
  1. git commit -a将暂存区域中的所有更改移动到存储库。
  2.   

git commit使用暂存内容创建新提交。 git commit -a自动暂存已更改或删除的跟踪文件,然后运行提交。新文件未添加。

详细了解git commit以及如何Git records the changes to the repository