2016-11-24 121 views
2

什么是真的git staging areaGit:暂存区工作流程

我习惯于仅与unstaged files一起工作,当我认为一切正常时,我将它们放置以构建提交。不过,我想这是出于某种原因,但我无法获得它可以帮助我的工作流程。

任何想法?

+0

这个问题经常被问到,并且有很多可能的答案(请参阅https://www.google.com/#q=git+why+staging+area)。一般来说,版本控制并不需要临时区域 - 例如Mercurial,它与Git非常相似,没有一个 - 在这种情况下,部分只是Git泄漏的实现机制,Git经常会这样做,部分原因是泄漏的实施机制提供了人们发现非常有用的能力。 – torek

回答

2

Git阶段的一个有用的目的是它可以作为一个可以容纳你打算提交的工作的地方,让工作目录仍然可用。这可以通过一个例子来解释。假设您完成了一项功能,并完成了所有测试和您自己的代码审查。这项工作现在已准备就绪,所以你git add你改变了所有的文件。这将使用这些文件填充舞台,此时,工作目录阶段都处于同步状态。

但现在假设您在最后一刻意识到您需要做出一些小改动。或者,您可以获得最后一刻的灵感来为该功能添加其他功能。该功能本身基本上是完整的,所以你不想改变你已经做好的工作。由于您的工作处于暂存区域,因此您可以根据需要修改工作目录。如果你想保留任何新的工作,你可以再次git add它。否则,你可以保持现状,做出承诺,并推动你的工作。

顺便说一句,如果中途想要将工作目录文件重置为舞台中的版本,可以通过git checkout FILE来完成。

请注意,很多Git插件(例如Eclipse的eGit)似乎都是跳过舞台,通常看起来直接从工作目录文件直接提交。

2

程序员很难改变应该成为下一次提交的一部分的东西。这就是临时区域帮助很大的地方 - 只需选择正确的位,忽略各种日志/调试语句或不相关的更改,然后才能提交。这样,您可以在一批更改中创建几个完整的提交。

2

这就是说,你可以选择你想要包含在提交中的内容不只是在文件中,而是在字符粒度。如果你正在寻找一个bug并且在整个地方都有很多临时调试语句被添加。现在你已经解决了一些问题并想要提交修复,但是怀疑可能还有更多,所以你仍然需要调试声明。因此,您启动git gui并在diff的上下文菜单中使用Stage hunk/Stage line条目以仅对修复进行修复,然后进行修改。你可以从git add -i得到相同的效果,或者你可以编辑差异到git add -e阶段,或者你可以用vim-fgitive这样的东西调整舞台。

有时您还可以使用舞台来分隔挂起的更改。假设你正在做某件事,做了一些事情,但现在你需要尝试一下。因此,您可以对自信的部分进行演示,或者您认为您可能需要返回并继续进行实验,然后在实验结果不符合要求的情况下轻松撤消实验。