使用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
,结果相同。
我想念什么?
答案 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