微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

结帐会覆盖哪些本地更改?

如何解决结帐会覆盖哪些本地更改?

我已完成所有本地更改。 git 想从我这里得到什么?

git version 2.31.1

enter image description here

error: Your local changes to the following files would be overwritten by checkout

解决方法

根据我的经验,git 会准确地告诉您出了什么问题,如果您 git checkout 未提交更改,它们将被覆盖(删除)。如果您暂时不想提交这些更改,另一种选择是 git stash 它们。 这是更详细答案的链接 Checkout another branch when there are uncommitted changes on the current branch

,

[注意由于您以某种方式进入“分离头”模式,这里的情况变得更加复杂。你还没有解释这是怎么发生的,让自己摆脱它一点也不简单。完整的答案需要更多信息,以便我们可以讨论那个。相反,我将只讨论来自 Git 的警告。]


Git 大声警告你是绝对正确的。如果您知道切换分支的含义,原因就很明显了。 git checkout dev 实际上做什么?

存在理由:您实际看到的文件不是您的。它们属于 Git,Git 将它们借给您,以便您可以编辑、添加和提交。它们构成了存储库的工作区(或工作树)。

好的,现在,如果您切换到 devdev 提交中的所有文件都会复制到您的工作区(以及索引中) .这就是checkout 意思。因此,您可以看到的文件将(或多或少)完全替换为一组不同的文件。

好的,好的。但是您的工作区域中有未提交的工作,也就是说,您有这个新文件 AgreementTotals.pm。但与此同时,dev 中已经存在该路径名的文件,内容不同。 (你可以看到区别,说git diff dev。)

因此,如果您现在切换到 dev 并重写工作区的内容,那么此版本的 AgreementTotals.pm 会发生什么?如果现在发生转换,您将失去在此 AgreementTotals.pm 上的工作。这真的是你想要的吗?

git 想要我做什么?

Git 希望您在切换分支之前提交。您可以通过说 git commit 以直接的方式执行此操作,也可以通过说 git stash 来执行此操作,这是我不推荐的一种偷偷摸摸的方式。

(由于您处于分离头模式这一事实增加了复杂性。您无法提交,因为您不在“分支上”。当您检出分离头时,Git 也警告过您。您会如果您想将当前工作保存在 AgreementTotals.pm 上,则需要立即创建一个分支以提交到该分支。)

所以,总而言之,Git 在这里阻止你是绝对正确的。 并认为自己很幸运。每隔一段时间,我就会读到一些可怕的故事,其中 Git 没有没有警告用户,而是继续替换工作区的内容,用户丢失了一堆没有的编辑被犯了。这不应该发生,但它可以。养成转换前先承诺的习惯,你的生活会变得更好。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。