“解释”;过度的局部变化”;在这种情况下切换git中的分支时发出警告?
几天前我克隆了一个存储库,为了运行cod,我需要修改类路径。今天有人告诉我拉X分支,我是用git pull做的 现在,当我执行git checkout X时,我会收到一条关于类路径文件的警告“解释”;过度的局部变化”;在这种情况下切换git中的分支时发出警告?,git,Git,几天前我克隆了一个存储库,为了运行cod,我需要修改类路径。今天有人告诉我拉X分支,我是用git pull做的 现在,当我执行git checkout X时,我会收到一条关于类路径文件的警告 Stash or commit it to prevent local changes from being overwritten. 为了重新创建此警告,我在其他项目中尝试了两种方案 第一种情况 在git回购中。在文件中进行更改而不是提交。然后创建一个新分支并签出到它。在这种情况下,它不会抛出此警告 第
Stash or commit it to prevent local changes from being overwritten.
为了重新创建此警告,我在其他项目中尝试了两种方案
第一种情况
在git回购中。在文件中进行更改而不是提交。然后创建一个新分支并签出到它。在这种情况下,它不会抛出此警告
第二种情况
在另一份回购协议中
git checkout X
,它会抛出该警告有人能给我解释一下这一点吗?这是如何解释我在类路径文件中看到的警告的?每次您签出到另一个分支时,它都会重置工作树以匹配该新分支的索引。并将索引设置为新的分支头 如果重置涉及修改(跟踪)的文件,签出将中止,并显示警告 第一个场景从现有分支创建一个分支:其索引将与现有分支相同(包括当前修改)因为头不移动(新分支的头与以前的头相同):您可以切换到它,而无需重置任何内容:工作树不变
第二个场景涉及两个不同分支的两个不同索引和两个不同的头:如果不保存或提交当前分支的更改,则无法切换到一个索引,因为签出需要将工作树重置为另一个分支内容(头),这将丢弃(并丢失)您的更改。基本上,问题是如果您尝试切换分支(这是git checkout X正在做的),并且目标分支(
X
在本例中)对您也在本地修改但尚未提交的文件进行了更改,则本地更改可能会被覆盖
请记住:更改分支时,工作树中的文件会更改以反映新索引
因此,如果您修改了一个需要更改以匹配目标索引的文件,您的更改将被覆盖,因此签出将中止。@Thor yes,我的观点是,当您切换分支时,签出会将工作树重置为新分支的索引。该索引被设置为新的分支头。所以被修改的文件将被覆盖以匹配分支头(带有反映该分支头的索引)。让我这样问,在第二个场景中,在签出时,我们在索引中没有任何内容,一个被跟踪的未提交文件(在master中),在索引中没有任何内容,在(X branch)的工作树中有一个文件。Head is branch在master中比Head早一个。那么,当我git checkout X时,什么被重置为什么,什么导致了警告?谢谢您的帮助。@Thor当您签出(第二个场景)时,您的更改将丢失,因为跟踪的修改文件将重置为第二个分支的标题内容。