9

我以前使用过 Mercurial,但计划在不久的将来切换到 Git。

我看过的所有解释 Git 如何工作的教程都表明,文件在每次提交之前被添加到阶段('git add'),无论它们之前是否被跟踪过。

Mercurial 也有一个以类似方式工作的命令('hg add'),但据我记得,你只需要执行一次'add'。例如,新存储库的步骤如下所示:

hg init
hg add .
hg commit "Initial commit"
hg push

Git 是否可以使用此工作流程,如果不是,重复“git add”的原因是什么?只是似乎没有必要。

4

4 回答 4

9

git 中的两阶段过程非常强大。尤其是在编辑源代码时,您经常并行进行一些不直接相关的更改。

使用暂存区域,您可以选择要提交的文件,从而为每个逻辑更改创建一个提交。

如果您想一次提交所有更改文件,您可以将git commit -a其用作快捷方式。
这会暂存所有更改和删除的文件并提交它们。
请注意:它不会自动添加未跟踪的文件。你仍然必须事先这样做。

于 2013-02-18T16:21:20.993 回答
6

是的,可以应用相同的一般工作流程,但也可以更有选择性地使用“添加”命令,方法是只向每次提交添加某些文件或文件的某些部分。这使得将逻辑上不同的补丁分成不同的提交变得更容易,从而更容易跟踪和与他人共享。

但是,是的,您可以只使用“git add”。一切都将进入暂存区进行提交。正如另一个答案中提到的,“git commit -a”是一个部分快捷方式(它不会添加新文件,但会将所有更改/删除提交到已跟踪的文件)。试试“git status”看看你的下一次提交中会包含什么,什么不会。

更新我还应该注意,对 git add 的补充是“git reset HEAD”,它会从暂存区中删除文件以供您下次提交。此外,如果您有兴趣将单个文件中的编辑分成多个提交,请在 git add 和 git reset 中使用“-p”标志,以便交互式地逐步浏览文件并选择要添加/重置的块。

于 2013-02-18T16:24:17.017 回答
1

这里应该提到的另一个快捷方式,并不是git add .is的重锤git add -u。不同之处在于前者将暂存任何未明确忽略的新添加文件(即在输出中列出的所有“未跟踪文件” git status),而后者将仅暂存已被跟踪的修改文件。

于 2013-02-18T16:55:06.523 回答
1

因为并非总是希望提交所有更改的文件,所以您可以(并且应该)选择要提交的文件。根据您正在使用的项目架构,有时您会为测试或其他内容执行额外的更改,而不是为生产执行必要的更改。

于 2013-02-18T16:21:35.243 回答