两个Git分支名称指向同一个分支?

时间:2012-03-22 08:12:15

标签: git branch git-merge git-flow

想想我在这里遇到了一个奇怪的小问题...我还是很新的git所以请光临我......

我创建了一个裸git存储库(“Core”),使用gitflow从预先存在的repo(“Production”)克隆。我已经将那个裸仓库再次克隆到一个非裸仓库(“Staged”),然后在Staged中重新初始化git流(因为当我克隆裸仓库时,似乎gitflow没有遇到......?)

但我刚注意到一些奇怪的事情。假设我在开发分支上的分阶段回购,并编辑文本文件(test.txt)。我运行git status并告诉我test.txt已被修改。真棒。

现在,我提交或合并,但我使用git checkout master结帐主人,然后再次运行git status,并说test.txt已被修改!

如果我错了,请纠正我,但我在开发分支上所做的任何更改都不应影响主分支吗?这让我相信我的“主”分支和“开发”分支实际上是同一个分支。

显然,我在某个地方的某个地方犯了一个非常愚蠢的错误,但在哪里呢?不知道。以前发生过这种情况吗?有关诊断问题的指示吗?我能想到的任何愚蠢的错误让人想起来吗?有补救措施吗?

(我想指出,事实上,我确实需要一个开发和主分支)

更新
在我的develop分支上提交更改后,结果是master确实返回到了正确的状态,并且develop现在处于更新状态。我开始觉得也许这就是git的行为???

最终
在这里查看评论。事实证明这已经解决了。道歉。

2 个答案:

答案 0 :(得分:1)

如链接问题中所述,在您提交更改之前,您的更改不是“任何分支的一部分”。在此之前,它们只是工作副本中的变化,因此git会尝试尽可能多地保留它们

答案 1 :(得分:1)

使用git,有三个重要的区域:存储库(保存所有版本),登台目录和工作目录。登台目录是您在提交之前暂存更改的位置(或者在您发出“git add”命令时文件的位置)。工作目录是您在签出的存储库中看到的文件集。

分支只是指向存储库快照的指针。当您交换活动分支时,git会尝试保留登台和工作区域中的更改,并将工作目录中的所有文件更改为分支指向的快照。如果它无法安全地执行此操作,它会告诉您存储更改。我没有尝试过暂存区域冲突,因为在交换分支之前,我倾向于提交暂存区域的内容。

在您的特定情况下,您修改了工作目录,然后交换了分支。由于修改未提交(或添加到暂存区域),因此当您更改分支时,git只需将工作目录恢复为主分支,并保留未提交的更改。这允许您根据需要将更改提交到其他分支。