[英]Why do I have to add the files being tracked before committing?
我是git的源代码控制新手。 我想确保自己对所有事情都了解,并且很早就发现了一些奇怪的东西。
这是我在做什么:
git clone [repo location] [local folder]
将这个仓库克隆到我的机器上 git commit
,这会产生一条消息,内容为“未针对提交进行更改”,但列出了被修改的.gitignore。 所以最终我将其添加,提交并推回原点,这显示了我在GitHub上所做的更改。 一切都很好。
这让我有些困惑。 如果未跟踪.gitignore,那么世界上如何使用git clone
将其下拉? 为什么在允许我提交更改之前,我必须手动添加它?
这是git查看您的存储库的方式:
repository --- staging area --- working directory
在存储库中,您可以在所有本地分支或fetch
远程分支中获取所有提交的信息。 在工作目录中,您已从某些提交中检出了所有文件,这些文件可能已被修改。 暂存区是您添加要提交的文件但尚未提交的位置。 这是因为在git中,您可以选择要提交的内容(例如,与svn不同,您可以提交任何已修改的内容)。
我强烈建议您阅读这篇文章 ,尽管该文章主要关注git reset
,但它对git的工作原理进行了很好的概述。
这是它的一幅小图:
repository --- staging area --- working directory
| | |
| | |
| Check out |
|-------------------------------------->|
| | |
| | add |
| |<-------------------|
| | |
| commit | |
|<-----------------| |
结帐非常明显。 后两个意味着您有选择地将文件添加到暂存区,然后提交它们。 例如:
$ touch file1 file2 file3 file4 # modify files
$ git add file1
$ git add file2
$ git commit
即使file3
和file4
也被修改, file4
也仅提交file1
和file2
。
有时候,您想要做的就是承诺您拥有的一切。 有一个快捷方式:
$ touch file1 file2 file3 file4 # modify files
$ git commit -a
git commit
-a
选项自动将所有修改过的文件添加到提交中。
您甚至可以git add -p
文件的一部分,这是由git add -p
完成的,它基本上向您显示提交补丁的各个部分,并让您选择要暂存哪些更改以及不进行哪些更改。 稍后,使用git commit
可以提交任何已暂存的内容。
这不是特定于.gitignore
。 除非您使用git commit -a
自动提交所有更改,否则您始终必须先使用git add
登台修改过的文件,然后才能提交它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.