git add <files>
git commit
第一步修订所谓的“临时区域”或“索引”。
我感兴趣的是做出此设计决策的原因及其好处?
另外,作为git用户,您可以这样做还是直接使用
git commit -a
?我问这个问题,因为我来自不具有此功能的bzr(集市)。
#1 楼
将工作分成单独的提交。您可能已经多次打开文件来编写单行修复程序,但是同时您发现格式错误,可以改进某些文档或其他一些不相关的修复程序。使用其他RCS,您必须将其记录下来或提交给内存,完成所需的修复,提交,然后返回以修复其他内容(或使用不相关的内容创建泥泞的提交)。使用Git,您只需一次修复所有问题,然后分别使用git add -i
或git-gui
分别执行阶段并提交单行。不要中断构建。您正在进行复杂的修改。因此,您尝试不同的方法,其中一些方法比其他方法更好,而某些方法则使事情变得更糟。使用Git,您可以在修改使情况变得更好时上演事情,并在修改不起作用时进行
checkout
(或进行更多调整)。您将不必依靠编辑器的撤消功能,可以checkout
整个存储库,而不仅仅是逐个文件以及任何文件级错误(例如,删除尚未提交的文件或保存后关闭+关闭)错误的修改)不会导致大量工作丢失。评论
来自不具有此功能的DVCS(bzr),这听起来很像我目前通过自由使用编辑器的“撤消”缓冲区,“还原
–胸骨
2011年4月19日在6:21
关于“其他RCS”,不一定是正确的。实际上,您可以使用补丁在Mercurial中实现相同的功能。
– Lucio Paiva
2014-10-12 17:04
@ l0b0,关于您的第二点。如果只有一个阶段提交,则可以将更改(与git add一起使用)直接提交为提交。如果您发现自己做错了什么,那您将删除该提交,然后回到执行提交之前的位置。使用分段概念,您不只是这样做,而是增加了更多的复杂性吗?
–alpha_989
18-4-10在17:15
-1,因为暂存区实际上与此处的第一点没有任何关系。 @ alpha_989的问题悬而未决:允许用户一次只提交其工作目录中的某些更改,不需要两阶段提交,Mercurial证明了这一点,该文件具有一个阶段提交,但仍提供hg commit --interactive。
– Mark Amery
18-10-16在22:45
这两个用例都是在Mercurial中处理的,没有暂存概念。到目前为止,已经阅读了大约十种尝试来解释过渡点的尝试,但都失败了,因为在这种情况下,作者似乎不了解其他VCS的功能。
– cja
20-2-1在21:09
#2 楼
对我来说,好处之一是能够逐步“添加”文件。在提交之前,我会检查每个文件。审核文件后,我将其添加。当我git status
或git diff
时,git仅向我显示已被修改但尚未添加的文件。当我检查完所有文件并添加它们后,便可以提交。所以是的,我发现暂存区非常有用。 。但是,我经常使用
git commit -a
。这样,我仍然可以可视化要提交的内容。评论
究竟。好处是可以精确控制您正在上菜的食物。
–乔什·K(Josh K)
2011-4-18在16:27
多次暂存一个文件时会发生什么?是否会在登台区域“合并”?
– m4l490n
17年7月26日在21:59
#3 楼
好处很简单:它使您可以完全控制何时要提交的文件。为此,您可以使用git add -p
来控制要提交的行。评论
我一直想知道如何做到这一点。我希望有一个.gitignorelines文件,以便您可以对个别行进行本地更改,使它们可以在提交后幸存下来并保持完整。
–alex灰色
13年9月29日在15:48
@ReinHenrichs,考虑需要由每个开发人员更改的配置文件。
–伊恩
2014年4月28日上午10:56
@Ian因此,文件的一部分很少更改并被共享,而文件的一部分经常以不兼容的方式更改,并且不共享?支持这种虚假的行为肯定听起来像是一种反特征。
– Rein Henrichs
2014年4月29日在16:58
@ReinHenrichs,是的,当文件包含数据库服务器的名称并且每个开发人员都有自己的数据库时,这很常见。
–伊恩
2014年4月29日在18:43
@Ian您的问题确实在那里,您有一个应该是应用程序的配置文件,还包含一些机器/设备特定的配置。我所知道的所有配置系统都可以将其拆分为多个文件。因此,例如,您有一个app.conf文件,其中包含要共享的内容,然后是一个db.conf文件,您刚刚将其放置在.gitignore列表中。问题解决了。如果您使用的是专有产品,则应该真正考虑在其中获得如此简单的功能。或通过预处理器将其放入预构建事件中。那里有很多解决方案。
– Aidiakapi
15年2月28日在1:30
#4 楼
我喜欢的好处之一是能够提交更改的一部分。即,通过使用git add -e。我的提交频率不如有时的高,并且git add -e命令可以使我对更改进行一定程度的解释。评论
Mercurial无需分期概念就可以做到这一点。不需要两个步骤
– cja
20年2月1日在21:12
评论
+1询问。我使用Tortoise SVN,它具有相同的方法,但我从来不明白为什么。暂存区并不稀奇。例如,TFS中的等效项是在签入之前选中或取消选中文件旁边的框。只有已选中的文件才被提交。与Git的区别在于,如果使用git add -p,则可以选择提交一个文件,而不选择提交同一文件的另一部分。
我发现此链接总结了此处回答的大部分内容,并添加了更多用例来证明需要进行登台。
这个问题实际上已经回答了,但是这里也是一个很好的解释:stackoverflow.com/questions/4878358/…
不要忘记git status以及可能的git push。对于有关git的所有宣传,(和GitHub共享代码都很棒)部分非常烦人