【问题标题】:Git asks me to commit or stash changes on checkout master, even though all changes were committed?即使所有更改都已提交,Git 要求我在结帐主机上提交或存储更改?
【发布时间】:2012-02-01 07:11:53
【问题描述】:

我在本地有两个分支,masterBerislav。后者目前处于活动状态,我已提交所有更改。当我尝试结帐到master 时,我收到以下消息:

错误:您对以下文件的本地更改将被覆盖 通过结帐:[活动分支中更改的文件列表]请, 在切换分支之前提交更改或存储它们。 中止

但是,我尝试过的所有其他操作——commitstatusmerge——告诉我没有什么可以提交(工作目录干净)。我需要做什么才能到达我的master 分支?

编辑:当我尝试git stash 时,我得到:

错误:将未修改的 [文件路径] 提供给 diffcore

对于上述错误中列出的所有文件。

【问题讨论】:

标签: git


【解决方案1】:

您的工作副本中似乎有未跟踪的文件,这些文件在另一个分支上被跟踪。 Git 拒绝签出另一个分支,因为您当前未跟踪的本地文件将被另一个分支上的文件覆盖。

你现在可以

  • 如果这些文件与该分支相关,则将这些文件添加到当前分支中
  • 如果不需要,请删除这些文件

【讨论】:

  • 另一种选择是使用git stash 将文件保存在存储区并在未来某个时间恢复它们(git stash pop
  • 问题是列出的文件被跟踪,并且当前分支被报告为是最新的。该问题仅在尝试结帐 master 时出现。
  • @BerislavLopac 你的仓库中有涂抹/清洁过滤器吗(progit.org/book/ch7-2.html)?还是主动 crlf 替换设置 (stackoverflow.com/a/2825829/311635)?
  • @BerislavLopac 至少要找回一个可行的主控,您还可以将您的 repo 克隆到一个新的工作副本中(并可选择将您当前的分支合并到那里)。
  • 我遇到了同样的问题。我的文件在 gitignore 中,而 git 不允许检出以前的目标分支。我从文件夹中删除了文件,它解决了问题。
【解决方案2】:

将有问题的文件移动到其他位置。然后从树中删除有问题的文件。再拉一次。然后将您的违规文件中的更改与您刚刚提取的文件进行比较。 hack,但它有效。

【讨论】:

  • 正是这样的东西让 git 赢得了难以使用的名声。
【解决方案3】:

我今天遇到了类似的问题。 git status 没有列出结帐抱怨的文件。我做了一个:

git checkout -- path/to/file

这会撤消对文件的任何更改。

撤消当前工作目录上所有未暂存更改的更简单方法[1]

git checkout -- .

[1] - 请注意 - 您将丢失您正在处理的任何其他非暂存更改(如果有)。如果您不知道自己在做什么,请备份您正在处理的文件:)

【讨论】:

  • 这对我帮助很大。 git checkout -f branch 不起作用,但这成功了。
  • 这有时无济于事。在实际情况下,文件的行尾从 CRLF 更改为 LF,.gitattributes 包含 *.sh text eol=lfgit checkout -- . 并没有用新的无 CR 版本替换它们
【解决方案4】:

就这么简单:

git stash
git stash pop

您在运行git stash 时看到的“错误”无需担心。只是 git 识别出该文件没有任何未提交的更改。

【讨论】:

    【解决方案5】:

    与@JohnHammink 的答案非常相似,但在这里。

    解决方案

    1. 将文件删除到另一个目录。
    2. 提交您的更改(它可能显示您刚刚删除了两个文件)。
    3. 将文件再次添加到目录中。
    4. 提交(您应该只能看到一个正在提交的文件)。

    在我的情况下,这是因为一个文件被重命名,只是对案例进行了更改。例如fooViewModel 到 FooViewModel。 Git 一直认为同一个文件实际上是两个独立的文件。

    我认为这与 Unix 区分大小写而 Windows 不区分大小写有关。

    希望对你有帮助

    【讨论】:

    • 我将文件移动到另一个位置,并且能够更改分支。
    【解决方案6】:

    我在新克隆上遇到了类似的问题。我只是用 --force (-f) 标志强制结帐

    git checkout --force some_branch 
    

    可能不是解决您要更改的存储库问题的最佳方法,但就我而言,我确信我没有进行任何更改,只是想切换分支。

    【讨论】:

    • 对我来说也一样。我尝试了所有选项,但这个工作正常,谢谢@Adam Bowen
    【解决方案7】:

    我遇到了同样的问题,这解决了我的问题(在 Linux 上):

    git config --global core.autocrlf input
    

    【讨论】:

      【解决方案8】:

      如消息所示,重新运行带有 --force 选项的命令。

      flutter upgrade --force
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-09-24
        • 1970-01-01
        • 2017-05-28
        • 2017-11-01
        • 2018-11-22
        • 1970-01-01
        • 2012-10-13
        相关资源
        最近更新 更多