我是git for source控件的新手。我希望确保我能够理解所有内容,而且很早就发现了一些看似奇怪的东西。
这就是我正在做的事情:
git clone [repo location] [local folder]
git commit
,这会产生一条消息,上面写着“未提交更改的更改”,但会将.gitignore列为已修改。所以最终我添加它,提交并推回原点,它显示了我对GitHub的更改。一切都很好。
这对我来说有点混乱。如果.gitignore没有被跟踪,那么世界上是如何使用git clone
将其拉下来的?为什么我必须在允许我提交更改之前手动添加它?
答案 0 :(得分:8)
这就是git查看您的存储库的方式:
repository --- staging area --- working directory
在存储库中,您将获得所有本地分支或fetch
远程分支中提交的所有内容。在工作目录中,您可以从一些提交中检出所有可能已修改的文件。暂存区域是您添加要提交的文件的位置,但尚未提交。这是因为在git中你可以选择要提交的内容(例如,与svn不同,你提交了任何被修改的内容)。
我强烈建议您阅读this article虽然专注于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
仅提交file1
和file2
,即使file3
和file4
也已修改。
有时候,你想要的就是提供你所拥有的一切。它有一个捷径:
$ touch file1 file2 file3 file4 # modify files
$ git commit -a
git commit
给定-a
选项会自动将所有已修改的文件添加到提交中。
您甚至可以暂存部分文件,这些文件由git add -p
完成,它基本上显示了提交补丁的各个部分,并允许您选择进行哪些更改以及不进行哪些更改。之后,使用git commit
,您可以提交任何已上演的内容。
答案 1 :(得分:6)
这不是.gitignore
特有的。除非您使用git add
自动提交所有更改,否则您必须先使用git commit -a
暂存已修改的文件。
More information about tracking and staging in the Git book.