2

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

但我刚刚注意到一些奇怪的事情。假设我在开发分支上的分阶段存储库中,并编辑一个文本文件(test.txt)。我运行git status它,它告诉我 test.txt 已被修改。惊人的。

现在,我没有提交或合并,但我使用 签出 master git checkout master,然后我git status再次运行它说 test.txt 已被修改!

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

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

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

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

4

2 回答 2

1

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

于 2012-03-22T08:43:21.740 回答
1

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

分支只是指向存储库快照的指针。当您交换活动分支时,git 会尝试保留暂存区和工作区中的更改,并将工作目录中的所有文件更改为分支指向的快照。如果它不能安全地做到这一点,它会告诉你隐藏你的更改。我没有尝试过暂存区冲突,因为我倾向于在交换分支之前提交暂存区的内容。

在您的特定情况下,您修改了工作目录,然后交换了分支。由于修改未提交(或添加到暂存区域),因此当您更改分支时,git 只是将工作目录恢复到主分支,并保留您未提交的更改。如果您愿意,这允许您将更改提交到不同的分支。

于 2012-03-22T08:53:07.290 回答