【发布时间】:2016-02-01 20:46:42
【问题描述】:
我经常尝试签出一个新的远程分支(从中创建一个本地分支,但这可能与我的问题无关)并且 git 失败并出现以下错误
错误:您对以下文件的本地更改将被结帐覆盖:
请在切换分支之前提交您的更改或存储它们。
现在,当我看到这一点时,可能会天真地期望,如果一个人隐藏更改,签出新分支,然后应用隐藏的更改,那么就会发生冲突,但几乎从来没有发生过这种情况。发生的情况是隐藏的更改干净地应用,并且在我签出新分支之前我没有丢失任何东西。为什么 git 会给出这个看似误导性的错误? 如果我可以在结账前隐藏并在最后干净地应用隐藏,为什么 git checkout 不只是在后台执行此操作?
编辑:
为了更清楚起见,我不是在问为什么结帐失败,或者为什么有时带有脏工作区的结帐会成功,我明白这一切。我的问题是,在这种情况下,有一个 100% 无数据丢失的行动方案(或者是否存在一些我看不到的数据可能丢失的极端情况??)那么为什么 git 不这样做?
如果我对刚接触 git 的人说,文件 foo 第 100 行上的一个 modif 会与文件 foo 第 2 行上的另一个 modif 冲突,这对他们来说是有意义的,接受它是事实,而不是抱怨和很容易解决冲突。但是因为 git 是一个很好的工具,它做的很聪明,甚至不会因为它可以修复而没有任何损坏风险的非问题来打扰你。为什么在这种情况下与git checkout 的理念不同?
【问题讨论】:
-
可能是因为结帐不是合并。 Git 不认为你想要合并,并且非常友好地指出这一点。
-
我不想要合并。我想将这些本地更改保留为本地更改,除非签出不同的分支。您无法合并未提交的内容
-
你对应用存储的讨论让我不相信。您可能需要稍微修改一下您的问题。
-
因为您想切换并保留本地更改,您的程序似乎是正确的方法。但其他人可能有不同的目标。所以,我认为 git 给你的建议是正确的,但是让程序适用于你......
标签: git git-stash git-checkout