Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git add:为什么我必须手动指定要提交的文件?_Git_Github_Version Control_Bitbucket - Fatal编程技术网

Git add:为什么我必须手动指定要提交的文件?

Git add:为什么我必须手动指定要提交的文件?,git,github,version-control,bitbucket,Git,Github,Version Control,Bitbucket,我正在学习如何使用git。因此,我创建了一个新的存储库,其中包含一个文件“foo.txt”。为了将它添加到版本控制中,我运行了git add foo.txt。然后,我对文件做了一些更改,并运行了git commit。然后,这似乎更新了存储库 然后我对文件做了一些进一步的更改。在此之后,我再次运行了git commit。但是,这一次,它返回时未添加任何更改以提交。但是,如果在运行提交之前运行git add foo.txt,它会进行更改 为什么每次我似乎都要添加我的文件?我希望能够在更改后运行git

我正在学习如何使用git。因此,我创建了一个新的存储库,其中包含一个文件“foo.txt”。为了将它添加到版本控制中,我运行了
git add foo.txt
。然后,我对文件做了一些更改,并运行了
git commit
。然后,这似乎更新了存储库

然后我对文件做了一些进一步的更改。在此之后,我再次运行了
git commit
。但是,这一次,它返回时未添加任何更改以提交。但是,如果在运行提交之前运行
git add foo.txt
,它会进行更改

为什么每次我似乎都要添加我的文件?我希望能够在更改后运行
git commit
,而不必告诉git我对哪个文件进行了更改


我必须手动指定要提交的文件是否正常?还是我做错了什么?我不能告诉git每次更改“foo.txt”时,我都希望它被添加到下一次提交中吗?

git中的暂存区域和提交的快照之间存在差异。在您使用
commit
命令时的解释中,您实际上提交了
foo.txt
的版本,就像使用
add
命令时一样。简而言之,
add
仅暂存准备提交的文件。保存快照需要使用
commit
命令

有时您对多个文件进行了更改,但希望它们处于不同的提交中,暂存区域允许您选择提交内容和提交时间,而不是一次性转储所有内容。还有其他用途,但这可能是初学者最容易理解的


不过,如果您只是保存代码库的快照,那么就不太有用了。有一个很好的开始使用git的指南

git add
与svn add的工作方式不同,它的目的不是“开始跟踪此文件”。其目的是“为下一次提交准备此内容”

如果您碰巧在未跟踪的文件上运行它,git将开始跟踪该文件,并在下次提交时包含该文件的当前内容。不过,它只是在跟踪内容——要跟踪的是一个新文件,这或多或少是添加文件内容的副作用

如果修改跟踪的文件,请使用
git add
将该更改的内容添加到下一次提交中

如果随后再次修改文件,则需要再次添加
git
,以准备所做的新更改

您还可以使用
git add-p
添加部分更改。这将允许您仅暂存对文件所做的一些更改,而不添加其他更改。(它将以类似于
diff
的方式将更改分块,并询问您是否要添加或忽略每个分块。)


这一切都是为了提高灵活性。您可以非常精细地控制向提交中添加哪些更改,这正是您所喜欢的方式。或者,您可以
git commit-a
一次扫描所有内容,如果您希望这样做的话。

因为对所有文件的所有更改并不总是属于同一个提交

例如,如果我正在重构一个主页,同时还在开发一个新的功能,用于在用户之间发送消息,那么这些更改与其他更改无关。因此,我的主页提交可能会有一条消息,如
“重构主页以包含酷照片”
,而消息发送功能提交可能会有一条消息,如
“在用户之间实现消息发送功能”


还要记住,您可以而且可能经常需要在特定提交中仅存储文件的某些部分,并在单独提交中存储对同一文件的其他更改

如果要提交所有更改的内容,请在提交时使用-a标志