2

我正在学习 git 并使用http://gitimmersion.com上的优秀教程来帮助我,但我正在努力解决几个看起来如此基本/必要/基本的基本概念,以至于大多数教程都掩盖了它们而没有真正深入研究它们的细节:

  1. 我了解使用 git,您首先通过 将更改“暂存”到本地存储库git add,然后通过 将更改提交到本地存储库git commit。但这有什么意义呢?这个“两阶段提交”增加了什么价值?为什么我要先进行更改,然后继续编码,然后进行更多更改,然后最终提交所有更改?为什么我不一次添加并提交所有更改?
  2. 还没有完全理解HEAD. HEAD 只是您签出的特定分支的最新状态/版本吗?
  3. 当您合并 2 个分支时,合并的更改是否被视为“暂存”或“已提交”?例如,我将我的big-project-branch背部合并到我的master分支中。我的master分支准备好被推到远程(原始)仓库了吗?还是我需要先提交?
  4. 我听说过“交互模式”这个词吗?这是什么(与 git 相关)?除了这个还有其他模式吗?

提前致谢!

4

2 回答 2

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

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

  2. 确切地。HEAD 是您当前在修订历史记录中指向的位置。它可以附加到分支(主)或任何提交 SHA(在这种情况下,您处于“分离的 HEAD”中)。如果您在 master 上并进行提交,HEAD 将指向这个新提交,并且分支标签“master”将随之移动。

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

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

于 2013-09-26T16:57:34.927 回答
0
  1. 不知道你为什么要暂存,然后编码,然后再次暂存,然后提交,但我经常会添加并提交以确保我不会在本地丢失我的工作。当一切都说完了,我将合并我的功能并推送到远程。(不确定这是否回答了您的问题。)

  2. 头部回答在这里

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

  4. 交互模式

于 2013-09-26T16:57:21.490 回答