我几天前克隆了一个存储库并使鳕鱼运行,我需要修改类路径。今天我被告知使用git pull
拉出X分支。
现在,当我git checkout X
时,我收到了类路径文件的警告
Stash or commit it to prevent local changes from being overwritten.
要重新创建此警告,我在其他项目中尝试了两种方案。
在git repo中。在文件中进行更改而不是提交。然后创建一个新分支并结帐。在这种情况下,它不会抛出此警告。
在另一个回购中,
git checkout X
,它会抛出警告。我真的不知道git背后显示此警告的逻辑是什么?显然,我可以看到这两种情况,并注意到它们给出了不同的结果。但我不知道,git想要抛出这个警告。
有人可以向我解释一下这是如何解释我用classpath文件看到的警告的吗?
答案 0 :(得分:3)
每次签出到另一个分支时,它将重置工作树以匹配该新分支的索引。并且索引设置为新分支HEAD。
如果该重置涉及修改(跟踪)的文件,结帐将中止您看到的警告。
您的第一个场景是从现有场景创建一个分支:它的索引将与现有索引相同(包括当前修改)因为HEAD不移动新的HEAD branch与之前的分支相同):你可以切换到它而不必重置任何东西:工作树没有改变。
你的第二个场景涉及两个不同分支的两个不同索引,它们有两个不同的HEAD:你不能在没有存储或从当前分支提交更改的情况下切换到一个,因为checkout需要将工作树重置为其他分支内容( HEAD),它会丢弃(并丢失)您的更改。
答案 1 :(得分:0)
基本上,问题在于,如果您尝试切换分支(这是git checkout X
正在执行的操作),并且目标分支(在这种情况下为X
)已对文件进行了更改你还在本地修改但没有提交,可以覆盖本地更改。
请记住:更改分支时,工作树中的文件会更改以反映新索引。
因此,如果您修改了一个需要更改的文件以匹配目标索引,那么您的更改将被覆盖,因此结帐会中止。