26

git update-index --assume-unchanged path/to/file在特定分支上运行后,我无法使用git checkout.

它抛出以下错误:

错误:您对以下文件的本地更改将被结帐覆盖:

      path/to/file

请在切换分支之前提交您的更改或存储它们。

中止

但是git diff&都git status告诉我没有区别 & 没有什么可以提交/存储的。

如何切换出分支?

有没有更好的选择git update-index --assume-unchanged (除了.gitignore,因为我不希望它被忽略)?(与问题 2 相同 @ git update-index --no-assume-unchanged 不起作用

4

2 回答 2

6

经过一定程度的使用后,我现在更喜欢git update-index --skip-worktree哪个是git update-index --assume-unchanged.

查看“assume-unchanged”和“skip-worktree”之间的区别以获取更多信息。

我还计划检查此答案中指定的方法,以git 假设不变 vs 跳过工作树 - 忽略符号链接,这似乎是更具防御性的方法。

于 2013-01-16T12:48:00.800 回答
0

我今天遇到了同样的事情,令人失望的是,我发现的大多数答案都与@Sujay 的相似——他们实际上并没有说明如何解决这个git checkout错误。

好吧,我从这个页面找到了一个可行的解决方案(无法弄清楚作者是谁,所以我可以给予信任):

对我有用的解决方案是使用 --skip-worktree。但是,就像上面的一些内容一样,即使在我希望将其更改保留在本地的文件上设置了 --skip-worktree 标志之后,我也很难在没有 git 抱怨的情况下在出票分支和主分支之间切换。

...

  1. cp <local-only_file> ~/
    • 将仅具有本地更改的文件复制到文件系统上的安全位置
  2. git checkout <local-only_file>
    • 在工作树中,签出文件,使其与主分支文件匹配
  3. git update-index --skip-worktree -- <local-only_file>
  4. cp ~/<local-only_file> ./
    • 将有问题的文件从安全位置复制回工作树
  5. git diff
    • 不应显示任何更改;如果您推送到主仓库,<local-only_file>则推送中不包含任何更改

git update-index --no-assume-unchanged <filename>在继续上述步骤之前,完整的解决方案开始了。完成这些步骤后,我能够切换分支。

于 2021-11-04T17:37:52.803 回答