git staging,head和mergeging concepts

时间:2013-09-26 16:16:42

标签: git version-control merge

我正在学习git并使用http://gitimmersion.com上的优秀教程来帮助我,但我正在努力学习几个基本概念,这些概念看起来非常基本/基本/基本,大多数教程都没有真正深入研究它们的细节:

  1. 我理解使用git,您首先通过git add“暂存”对本地仓库的更改,然后通过git commit将更改提交到您的本地仓库。但这有什么意义呢?这个“2阶段提交”增加了什么价值?为什么我会进行更改,然后继续编码,然后进行更多更改,然后最终提交所有更改?为什么我不能添加&立即提交我的所有更改?
  2. 仍未完全理解HEAD的概念。 HEAD只是您检查过的特定分支的最新状态/版本吗?
  3. 合并2个分支时,合并后的更改是“分阶段”还是“已提交”?例如,我将big-project-branch合并回我的master分支。我的master分支是否已准备好被推送到远程(原始)仓库?或者我需要先提交它吗?
  4. 我听过“互动模式”一词吗?这是什么(与git的重复)?除此之外还有其他模式吗?
  5. 提前致谢!

2 个答案:

答案 0 :(得分:1)

  1. 当您进行一组修改并且不想一起提交时,暂存非常有用。请记住,Git最初是一个命令行工具,所以,与Subversion不同的是,你只需要在提交时精确推送什么(大多数情况下需要GUI帮助),Git有一个专门的命令。在某些Git GUI(SmartGit ...)中,可以通过选择自动完成阶段,就像SVN客户端一样。

    暂存也是一个有趣的概念,只允许为下次提交选择几行修改(git add -p)。

  2. 完全。 HEAD是您当前在修订历史记录中指向的位置。它可以附加到分支(主)或任何提交SHA(在这种情况下,在'分离的HEAD'中)。如果你是master并且做了提交,HEAD将指向这个新的提交,并且分支标签'master'将随之移动。

  3. 合并会创建一个新提交,它会合并两个分支之间的联结。要与所有人共享此合并,您必须推送此新提交。

  4. 我猜你在谈论交互式变基。标准的rebase命令“重放”从分支到另一个分支的提交。从图形上看,它看起来像是从一个分支移动到另一个分支的顶部(但它不是,它实际上是重放,在操作之后仍然存在原始提交)。交互模式(git rebase -i)是一个额外且极其强大的功能,允许在最终的rebase图片中重新组织提交,跳过或压缩其中一些,或重命名其中一些。

答案 1 :(得分:0)

  1. 不知道你为什么要上台,然后再编码然后再上台,然后提交,但经常我会添加并提交以确保我不会在本地丢失我的工作。当这一切都说完了,我将合并我的功能并推送到远程。 (不确定这是在回答你的问题。)

  2. Head Answer here

  3. 合并git时会尝试自动合并分支。如果发生冲突,您将不得不进行干预。如果你必须干预它只会进行合并,你将不得不提交。如果git处理它,它将被提交。

  4. Interactive Mode

相关问题