Git检出失败,因为本地更改...没有本地更改?

时间:2018-07-20 16:25:29

标签: git reset git-checkout

使用Git 2.7.4,我对分支进行了一些更改。提交并推送到分支。

[user:~/terraform] mybranch ± git status
On branch DIC-98-rhel-lb0
nothing to commit, working directory clean
[user:~/terraform] mybranch ±


[user:~/terraform] mybranch ± git push origin mybranch
Everything up-to-date

当我尝试切换到主版本

[user:~/terraform] mybranch ± git checkout master
error: Your local changes to the following files would be overwritten by checkout:
    azure-openshift/.gitignore
    azure-openshift/bastion.tf
    azure-openshift/bootstrap.sh
    azure-openshift/bootstrap.tfvars
    azure-openshift/cns.tf
    azure-openshift/infra.tf
    azure-openshift/master.tf
    azure-openshift/openshift.auto.tfvars
    azure-openshift/openshift.variables.tf
    azure-openshift/revproxy.tf
Please, commit your changes or stash them before you can switch branches.
Aborting
[user:~/terraform] mybranch 1 ± 

我也可以先执行git reset,结果相同。

我想念什么?

1 个答案:

答案 0 :(得分:1)

这些文件很可能在您当前的分支(mybranch)中被忽略,但它们是master分支的一部分(也许它们是在某个时候意外提交的?)。因此,当您当前的分支干净时,签出master将会覆盖那些文件,并有丢失该数据的风险。

如果您知道覆盖这些文件是安全的,则可以告诉git,您肯定要使用master标志签出-f

git checkout -f master

如果不确定,则可以尝试将master重新设置或合并到您的问题分支中,并解决所有冲突等。


例如,假设您在master分支中意外包含了名为foo.temp的文件,该文件是在运行build时生成的日志文件。

然后,您创建一个新分支remove_foo,并将foo.temp添加到您的.gitignore中。您进行构建(从而修改foo.temp),提交更改并将其推送到服务器。

一切看起来不错。 git status返回干净。

然后,您尝试检出master并出现错误:foo.temp将被master中的版本覆盖。 Git试图保护您的工作。

幸运的是,您知道这是一个临时性问题,因此您使用git checkout -f master是因为知道foo.temp被覆盖是可以的。

最终,remove_foo将被同行评审并合并为母版,而这种烦恼将会消失。


如果您尝试删除存储库中意外包含的某些文件,那么您可能会发现这很有帮助:

Remove a file from a Git repository without deleting it from the local filesystem