所以,我有点困惑。
我不太擅长 git,但我记得如果您所在的分支有未提交的更改,并且您尝试签出另一个分支,git 要么不让您这样做,要么会放弃您的更改。
我还在 Chacon 和 Straub 所著的 Apress 的“Pro Git”书中检查了这种行为的真实性。
And also
我承认我的英语不是很好,但我记得从以前我更经常使用 git 的时候这种解释是正确的。或者我在更改分支时 git 丢弃未提交的更改是错误的吗?我对书上说的内容理解错误吗?
如果我是对的,为什么我的存储库要将更改的文件从一个分支移动到另一个分支?您可以在此处检查行为:
检查我是否在主分支中,并且使用以下命令检查更改是否干净git status
.
创建一个新分支并移至该分支。
进行一些随机更改,例如使用删除几行ed
.
更改回主分支。
惊喜,一个git diff
or a git status
显示该文件在 main 上也发生了更改。
git 不应该阻止我更改分支或放弃我的更改吗?这非常令人困惑,我花了一段时间才意识到,如果我没有更改任何内容,为什么我的主分支会出现意外行为。
git version 2.30.1 (Apple Git-130)
Edit: 一些答案说的是git switch
不同于git checkout
。我仍然不确定情况是否如此,因为不同的人(和文档)有不同的说法。
但是,我也尝试过同样的使用git checkout
它还会移动文件,而不是阻止我切换或警告我工作目录中的差异。
你可以看到git checkout
执行相同的操作如下:
当您切换分支时,未提交的更改将保持不变。否则,像切换分支这样无害的操作会默默地删除您所做的任何本地工作。这不好(用户会抱怨;这是理所当然的)。
请记住:工作树中的局部更改是not链接到任何分支。它们只生活在你的工作树中。
您的第一个引用/屏幕截图仅讨论已提交的更改:当您切换分支时,您的工作目录将反映切换到分支的内容。它还提到“如果 Git 做不到cleanly“(强调我的)——这意味着只有在本地(未提交)和其他分支中更改了相同的文件时,Git 才会中止。
第二句话明确提到“未提交的更改会发生冲突”。在这种情况下,Git 将拒绝切换分支。您可以提交更改、删除它们或隐藏它们——之后,您可以切换到另一个分支。
仅当分支之间的(提交的)文件不同时才会发生冲突。切换分支时,“冲突检测”中不考虑本地未提交的更改。
这种行为的git checkout
一直都是一样的。git switch
(结帐的较新替代方案)的行为方式相同。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)