更改分支不会放弃本地更改 [英] Changing branches does not discard local changes

查看:0
本文介绍了更改分支不会放弃本地更改的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以,我有点困惑。

我不太擅长Git,但我记得,如果您在一个分支中有未提交的更改,并且您尝试签出另一个分支,Git要么不允许您这样做,要么会放弃您的更改。

我还在Chacon和Straub的《Apress;Pro Git&Quot;》一书中验证了这一行为是否属实。

我承认我的英语不是很好,但我记得这种解释在过去是正确的,因为我更经常使用GIT。或者,关于Git在更改分支时丢弃未提交的更改,我是不是错了?我是否理解错了书中所说的内容?

如果我是对的,为什么我的存储库要将更改的文件从一个分支移动到另一个分支?您可以在此处查看行为:

使用git status检查我是否在主分支中并且没有更改。

创建新分支并移动到该分支。

执行一些随机更改,如使用ed删除几行。

改回主分支。

意外的是,agit diff或agit status表示该文件也在Main上更改。

Git不应该阻止我更改分支或放弃我的更改吗?这非常令人困惑,我花了一段时间才意识到,如果我没有对其进行任何更改,为什么我的主分支会有意外的行为。

git version 2.30.1 (Apple Git-130)


编辑:一些答案提到git switchgit checkout不同。我仍然不确定是不是这样,因为不同的人(和医生)会说不同的事情。

但是,我也尝试了使用git checkout相同的方法,它也会移动文件,而不是阻止我切换或警告我工作目录中的差异。

您可以看到git checkout的操作如下:

推荐答案

切换分支时,未提交的更改将保持不变。否则,像切换分支这样的无关紧要的操作会悄悄地删除您所做的任何本地工作。这并不好(用户会抱怨;这是理所当然的)。

记住:工作树中的本地更改不会链接到任何分支。它们只生活在您的工作树中。

您的第一个引用/屏幕截图只讨论已提交的更改:当您切换分支时,您的工作目录将反映切换到的分支的内容。它还提到了如果Git无法干净利落地&qot;(强调我的)-这意味着只有在本地(未提交)和其他分支中更改了相同的文件时,Git才会中止。

第二个引号明确提到了与冲突的未提交更改。在这种情况下,Git将拒绝更换分支机构。您可以提交、删除或隐藏更改-之后,您可以切换到其他分支。

仅当分支之间的(已提交)文件不同时,才会发生冲突。切换分支时,冲突检测中不考虑本地未提交的更改。

git checkout的这一行为始终是相同的。git switch(结帐的较新替代方案)的行为与此相同。

这篇关于更改分支不会放弃本地更改的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆