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



我创建了一个裸git存储库("Core"),使用gitflow从预先存在的repo("Production")克隆而来。我再次将裸回购克隆到非裸回购中("Staged"),然后在Staged中重新初始化gitflow(因为我克隆裸回购时似乎没有遇到gitflow?)

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

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

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

很明显,我在某个地方犯了一个极其愚蠢的错误,但在哪里呢?不知道。这种事以前发生过吗?这里有诊断问题的建议吗?有人会想起我可能犯的任何愚蠢的错误吗??有补救办法吗?

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

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

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

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

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

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

最新更新