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

Kar*_*rus 2 git version-control github bitbucket

我只是在学习如何使用git.所以,我创建了一个新的存储库,其中包含一个文件"foo.txt".要将其添加到版本控制,我跑了git add foo.txt.然后,我对文件进行了一些更改,然后运行git commit.这似乎更新了存储库.

然后我对文件做了一些进一步的更改.在此之后,我又跑git commit了.但是,这一次,它返回no changes added to commit.但是,如果我git add foo.txt在运行提交之前运行,它确实会进行更改.

为什么我似乎add每次都要访问我的文件?我希望能够git commit在我的更改之后运行,而不必告诉git我更改了哪个文件.

我必须手动指定要提交的文件是否正常?或者我做错了什么?我不能告诉git,每当"foo.txt"发生变化时,我希望它被添加到下一次提交中吗?

Dan*_*owe 5

git add不起作用的方式svn add,其目的不是"开始跟踪此文件".它的目的是"为下次提交提供此内容".

如果您碰巧在未跟踪的文件上运行它,git将开始跟踪该文件,并包含该文件的当前内容以供下次提交.它只是跟踪内容 - 事实上它是一个新的跟踪文件或多或少是添加文件内容的副作用.

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

如果您再次修改该文件,则需要git add再次进行所做的新更改.

您还可以使用添加部分更改git add -p.这将使您只进行对文件所做的一些更改,但不添加其他更改.(它将更改类似于如何进行更改diff,并询问您是否要添加或忽略每个块.)

这一切都是为了灵活性.您可以非常精确地控制添加到提交中的更改,具体取决于您的喜好.或者,您可以git commit -a立即清理所有内容,如果这是您想要的工作方式.