【问题标题】:Git checkout fails with because local changes ... without local changes?Git checkout 失败,因为本地更改......没有本地更改?
【发布时间】:2018-07-20 16:25:28
【问题描述】:

我使用 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,结果相同。

我错过了什么?

【问题讨论】:

  • git status 的输出是什么?您使用的确切 git reset 命令是什么?
  • @Code-Apprentice - onknows 已经在问题中包含了git status 的输出。
  • @JDB OIC...我错过了,因为我期待更多...
  • 试试git reset --hard HEAD。虽然,如果 JDB 是正确的,您的文件在 .gitignore 中,那么它可能仍然无法正常工作。
  • 您的git status 输出显示On branch DIC-98-rhel-lb0(注意名称)。您的git push 命令说要根据名称mybranch 推送(注意不同的 名称)。

标签: git reset git-checkout


【解决方案1】:

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

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

git checkout -f master

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


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

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

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

然后您尝试签出 master 并收到错误:foo.temp 将被 master 中的版本覆盖。 Git 正在尝试保护您的工作。

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

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


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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-03
    • 1970-01-01
    • 2017-05-28
    • 2012-05-11
    相关资源
    最近更新 更多