我使用 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
当我尝试切换到master
[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
,结果一样。
我错过了什么?
最佳答案
很可能这些文件在您当前的分支 (mybranch
) 中被忽略了,但它们是 master
分支的一部分(也许它们是在某个时候不小心提交的?) .因此,虽然您当前的分支是干净的,但 check out master 会覆盖这些文件并有丢失该数据的风险。
如果您知道覆盖这些文件是安全的,那么您可以告诉 git 您确定要使用 -f
标志 check out master
:
git checkout -f master
如果您不确定,那么您可以尝试将 master rebase 或 merge 到您的问题分支并解决任何冲突等。
例如,假设您不小心在 master 分支中包含了一个名为 foo.temp
的文件,这是一个在您运行构建时生成的日志文件。
然后您创建一个新分支 remove_foo
,并将 foo.temp
添加到您的 .gitignore
。您构建(从而修改 foo.temp
),提交并将您的更改推送到服务器。
一切看起来都很好。 git status
返回干净。
然后您尝试 check out master 并收到错误:foo.temp
将被 master
中的版本覆盖。 Git 正在努力保护您的工作。
幸运的是,您知道这是一个临时问题,所以您使用 git checkout -f master
因为您知道如果 foo.temp
被覆盖也没关系。
最终,remove_foo
将被同行评审并 merge 到 master 中,这个小烦恼将消失。
如果您试图删除一些不小心包含在存储库中的文件,那么您可能会发现这很有帮助:
Remove a file from a Git repository without deleting it from the local filesystem
关于Git checkout 失败,因为本地更改...没有本地更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51446801/