我之前使用过Mercurial,但计划在不久的将来切换到Git。
我所看到的解释Git如何工作的所有教程都显示在每次提交之前将文件添加到舞台('git add'),无论它们之前是否被跟踪过。
Mercurial也有一个以类似的方式工作的命令('hg add'),但从我记忆中,你只需要做'添加'一次。例如,新存储库的步骤如下所示:
hg init
hg add .
hg commit "Initial commit"
hg push
这个工作流程是否可以使用Git,如果不是,那么重复'git add'的原因是什么?似乎没必要。
答案 0 :(得分:8)
git中的两个阶段过程非常强大。特别是,在编辑源代码时,您经常会并行进行多次不直接相关的更改。
使用暂存区域,您可以选择要提交的文件,从而为每次逻辑更改创建一个提交。
如果您想一次提交所有更改文件,可以使用git commit -a
作为快捷方式
这个阶段所有更改和删除的文件并提交它们
请注意:它不会自动添加未跟踪的文件。你仍然必须事先做到这一点。
答案 1 :(得分:4)
是的,可以应用相同的常规工作流,但通过仅向每个提交添加特定文件或仅添加文件的某些部分,也可以更有选择性地使用“添加”命令。这样可以更容易地将逻辑上不同的补丁分成不同的提交,这样可以更轻松地跟踪和与他人共享。
但是,你可以“git add”。一切都会进入提交区域。正如另一个答案所述,“git commit -a”是一个部分快捷方式(它不会添加新文件,但会将所有更改/删除提交给已经跟踪的文件)。尝试“git status”以查看将在下次提交中包含的内容以及不会包含的内容。
UPDATE 我还应该注意,git add的补充是“git reset HEAD”,它会从暂存区域中删除文件以供下次提交。此外,如果您有兴趣将单个文件中的编辑分成多个提交,请使用“-p”标志同时执行git add和git reset,以便以交互方式逐步浏览文件并选择要添加/重置的块。
答案 2 :(得分:1)
因为并不总是想要提交所有已更改的文件,所以您能够(并且应该)选择要提交的文件。根据您正在使用的项目阶段,有时您会对测试或其他内容执行附加更改,而不是生产所必需的。
答案 3 :(得分:1)
这里应该提到的另一个捷径,git add .
并不是git add -u
的重锤。git status
。不同之处在于前者会暂存任何未明确忽略的新添加文件(即{{1}}输出中列出的所有'未跟踪文件'),而后者只会暂存已经跟踪过的已修改文件。