使用Git时,我的工作流程通常涉及启动TortoiseGit并选择我想要提交的文件。
这(我假设)运行 git add (?)并将这些更改提交到本地仓库。
我的问题是 - 为什么将ADDING文件与索引分开并将它们委托给它们?
是否有任何用例只是简单地将文件添加到索引而不同时提交它们?
答案 0 :(得分:8)
将文件添加到索引称为分段。暂存提供了在提交内容和保留在提交之外的内容之间的分离。如果您做了一些更适合不同提交的更改,您可以将它们保留在那里而不进行暂存,并为添加到索引中的内容进行提交。
因此,从本质上讲,它可以帮助您准备简单,连贯的提交。
答案 1 :(得分:3)
我使用了索引/暂存区域。它可以被认为有点像购物车。它可以让你在项目中闲逛,随时添加东西,填满你的购物车。一旦你拥有你想要的东西,你就会提交(即购买这些变化并离开商店)。
这个的一个很棒的功能是补丁添加。 git add -p
又名git add --patch
允许您从文件中选择特定的帅哥,因此您可以实际提交各种文件的部分内容。我每天都会这样做,虽然我使用Vim的病原体插件,这使得从更改到更改,在工作副本和索引副本之间来回移动它非常容易和直观。一旦我只将一个漂亮的,细粒度的提交的部分添加到购物车中,我就会使用一个合理的,精细的提交消息提交它,不超过50个字符。这让我的历史令人难以理解,并且让我在一小时后改变主意并交互式地重新组合以将提交推到一起,并将它们重新排序为更合理的流程,有时在每次提交时都要进行单元测试,所以我有我历史上到处都是干净,安全,回滚点。
我还使用了补丁添加来帮助我找出文件的哪些部分有意义。在Vim中我做,gs
,在新的分割窗口中弹出一个git状态,用于当前文件的repo。我使用<C-n>
和<C-p>
来跳转状态消息的行,并在其上显示实际文件。我在这些行上使用D
来在一组拆分窗口中对它们进行vimdiff,然后使用]c
(差异放置)将c[
和dp
从跳转变为更改do
(diff获取)将更改移入或移出当前缓冲区(这些工作来自拆分,<C-w>h
和<C-w>l
在缓冲区之间来回跳转)。一旦我喜欢我为该文件播放的内容,我:w
保存它,并<C-w>k
再次分配状态,以选择要以这种方式暂存的新文件,或-
1}}对任一组中的文件进行切换以完全切换进出分段,或者cc
进行实际提交,然后请求提交消息。在进行提交之前,我可以通过这些方法查看所有进展的内容,而且我常常会在这一点上意识到我忘记了某些内容,或者添加了一些我不应该做的内容,并对其进行了更正。因此,我的承诺相当原始。如果我想commit --amend
,我可以使用cA
代替cc
,或ca
,如果我还要重新提交提交消息。
简而言之,提交整个文件 - 就像我以前在SVN时所做的那样 - 现在感觉非常粗糙和不正确。在工作时只改变一个问题真的很难,但通过索引的功能进行补丁添加让我在一次提交中梳理出有意义的实际变化。
答案 2 :(得分:1)
暂存几乎就像文件的迷你提交一样。您可以暂停,重新登台,查看更改,就像您已提交一样,甚至可以在实际提交之前恢复到最新阶段。做几次小型提交可以帮助你进行组织,就像做几次完整的提交一样。
它本质上是一个更精细的粒度级别。
它还允许你在提交之前在本地玩一下 - 它实际上与创建一个游乐场分支和做一堆提交相同,然后在最终提交之前合并。比这更轻巧。
答案 3 :(得分:0)
您不必提交您添加到索引/暂存区域的所有文件。
git add fileA
git add fileB
git add fileC
用例1:仅提交fileA和fileB:
git commit -m "fileA, fileB added." fileA fileB
用例2:在将文件添加到暂存区域后跟踪文件的更改。这将显示工作副本与上次将文件添加到暂存区域之间的区别。
答案 4 :(得分:-1)
在SmartGit中,您可以在文件上单击鼠标右键,然后选择satge。