![](/img/trans.png)
[英]File not shown in git diff after a git add. How do I know it will be committed?
[英]Do I have to 'git add' a file each time it gets committed?
我之前使用过Mercurial,但计划在不久的将来切换到Git。
我见过的所有教程解释了Git的工作原理,表明在每次提交之前,文件都被添加到舞台('git add'),无论之前是否被跟踪过。
Mercurial还有一个以类似方式工作的命令('hg add'),但从我记忆中,你只需要做一次'添加'。 例如,新存储库的步骤如下所示:
hg init
hg add .
hg commit "Initial commit"
hg push
这个工作流程是否可以使用Git,如果不是,那么重复'git add'的原因是什么? 似乎没必要。
git中的两个阶段过程非常强大。 特别是,在编辑源代码时,您经常会并行进行多次不直接相关的更改。
使用暂存区域,您可以选择要提交的文件,从而为每个逻辑更改创建一个提交。
如果要一次提交所有更改文件,可以使用git commit -a
作为快捷方式。
此阶段所有已更改和删除的文件并提交它们。
请注意:它不会自动添加未跟踪的文件。 你仍然必须事先做到这一点。
是的,可以应用相同的通用工作流,但也可以通过仅向每个提交添加某些文件或仅添加某些文件部分来更有选择地使用“添加”命令。 这样可以更轻松地将逻辑上不同的补丁分成不同的提交,这样可以更轻松地跟踪和与他人共享。
但是,是的,你可以“git add”。 一切都会进入提交区域。 正如另一个答案中所提到的,“git commit -a”是一个部分快捷方式(它不会添加新文件,但会将所有更改/删除提交给已经跟踪的文件)。 尝试“git status”以查看将在下次提交中包含的内容以及不会包含的内容。
更新我还应该注意到git add的补充是“git reset HEAD”,它会从暂存区域中删除文件以供下次提交。 此外,如果您有兴趣将单个文件中的编辑分成多个提交,请使用“-p”标志同时执行git add和git reset,以便以交互方式逐步浏览文件并选择要添加/重置的块。
因为并不总是想要提交所有已更改的文件,所以您(并且应该)可以选择要提交的文件。 根据您正在使用的项目拱,有时您会对测试或其他内容执行附加更改,而不是生产中必需的更改。
这里应该提到的另一个捷径,那不是git add .
重锤git add .
是git add -u
。 不同之处在于前者会git status
任何未明确忽略的新添加文件(即git status
输出中列出的所有“未跟踪文件”),而后者只会git status
已经跟踪过的已修改文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.