Git Checkout 错误

3
我正在使用一个脚本自动检出过去12个月中每个月的第一次提交。偶尔会出现一些奇怪的情况,我不能再检出过去的提交。错误信息如下:
error: 您对以下文件所做的本地更改将被检出覆盖: db tests/framework.cpp 请在切换分支之前提交您的更改或把它们存储起来。退出。
这种情况已经发生了很多次(我没有编辑任何文件,只是检查它们)。通常我会从Github下载一个新的仓库副本并重新开始整个过程,这样就能解决问题。但是一旦出现问题,我就不知道该如何修复,而且问题还会继续发生。有什么想法吗?
这是我的脚本中正在进行的迭代,然后是“git status”的输出。
for i in {12..1}

do

cd
cd git/mongodb/mongo

git checkout master                   
git checkout $(git rev-list --before "$(date -d "$(date +%Y-%m-01) -$i months 00:01" +%Y-%m)-01" -n 1 HEAD)
git checkout master

Git状态:

在主分支上

未暂存以提交的更改:

        modified:    dbtests/framework.cpp

未跟踪的文件:

       SHA1.txt
       SHA1.txt.
       file
       file.

没有新增的更改可以提交


1
我们能看到脚本那部分的代码吗? - Chris Cherry
当这种情况发生时,git status的输出是什么? - Andrew Marshall
你的 core.autocrlf 配置设置是什么? - jdigital
2个回答

5

你可以使用--force标志来让Git无论如何都执行checkout操作。

或者,你也可以使用git reset --hard来重置到某个提交,而不是使用checkout操作。


谢谢 Amber。使用 --forcegit reset --hard 有什么缺点吗?如果我使用 git reset --hard,那么 git checkout master 命令会让我回到主分支吗? - blaughli
“--force”未被识别,但“git reset --hard”有效。但我不确定如何返回到最新的提交后。帮忙吗? - blaughli
使用 git reset --hard 命令可以移动分支指针,如果你当前在一个分支上。如果你不想修改当前分支,可以检出一个新的分支或使用 git checkout -f 命令。如果你已经移动了指针,可以使用远程跟踪引用(假设它是最新的):git reset --hard origin/master。如果这样还不行,可以使用 reflog (git reflog) 找到分支曾经指向的位置并重置到那里。 - Amber
太好了,我明白了。非常感谢您提供的这些非常有用的帮助。 - blaughli

0

2019+语法现在将使用新的git switch命令(Git 2.23+)

git switch -f ...

-f 是 --discard-changes 选项的别名:

即使索引或工作树与 HEAD 不同,也要继续进行。
索引和工作树都将恢复以匹配切换目标。
如果指定了 --recurse-submodules,子模块内容也将恢复以匹配切换目标。

这用于丢弃本地更改。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接