所以,我有些困惑。
我不太懂git,但是我记得如果你在一个有未提交更改的分支上,尝试切换到另一个分支,git 要么不让你这样做,要么将放弃你的更改。
我还查看了 Chacon 和 Straub 的 Apress 《Pro Git》书籍,证实了这种行为是正确的。
还有
我承认我的英语不是很好,但我记得这个解释是正确的,因为从前我经常使用git。或者说我对于git在改变分支时丢弃未提交的更改的理解是错误的吗?我是否错误地理解了书中的内容?
如果我是正确的,为什么我的存储库会将更改的文件从一个分支移动到另一个分支?您可以在此处检查其行为:
使用
git status
检查当前是否在主分支并且干净无更改。
创建一个新的分支并切换到它。
进行一些随机更改,比如使用
ed
删除几行。
切换回主分支。
惊喜的是,
git diff
或git status
显示主分支上的文件也被更改了。
难道不应该由 git 阻止我更改分支或者放弃我的更改吗?这很令人困惑,我花了一段时间才意识到为什么我的主分支表现出了意外的行为,即使我没有对它做任何更改。
git version 2.30.1 (Apple Git-130)
编辑: 一些答案提到git switch
与git checkout
不同。 我仍然不确定这是否正确,因为不同的人(和文档)有不同的说法。
但是,我也尝试了使用git checkout
来做同样的事情,它也会移动文件,而不是阻止我切换或警告我工作目录中的差异。
您可以看到git checkout
做相同的事情如下:
git switch
和git checkout
有一些不同,但真正的关键区别在于,某些git checkout
的参数集会以 Git 新手甚至有经验的 Git 用户意想不到的方式破坏未提交的工作。switch
命令的引入 (a) 解决了这个问题(即使在git checkout
中:它现在会提示您的请求是模棱两可的),并且 (b) 给新手一个不能以这种方式破坏未提交工作的命令:没有请求语法可以实现这一点。 - torek