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

onk*_*ows 5 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
Run Code Online (Sandbox Code Playgroud)

当我尝试切换至主机

[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 ± 
Run Code Online (Sandbox Code Playgroud)

我也可以先做git reset,得到相同的结果。

我想念什么?

JDB*_*JDB 4

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

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

git checkout -f master
Run Code Online (Sandbox Code Playgroud)

如果您不确定,那么您可以尝试将 master 变基或合并到您的问题分支中并解决任何冲突等。


例如,假设您不小心foo.temp在 master 分支中包含了一个名为 的文件,该文件是您运行构建时生成的日志文件。

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

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

然后,您尝试签出 master 并收到错误:foo.tempwill be overwriting with the version in master. Git 正在努力保护您的工作。

幸运的是,您知道这是一个临时问题,因此您使用它,git checkout -f master因为您知道如果foo.temp被覆盖也没关系。

最终,remove_foo将被同行评审并合并到master中,这个小烦恼就会消失。


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

从 Git 存储库中删除文件,而不将其从本地文件系统中删除