Git命令行切换分支为何保留未提交改动?如何复刻Pycharm强制检出功能
问题解答
现象原因
未提交的改动默认属于Git工作区、暂存区的内容,不属于任何分支的提交记录。只要你当前改动的文件和目标分支my_branch的对应文件不存在冲突,默认的git checkout <分支名>命令就会直接把这些未提交改动带到切换后的目标分支,不会弹出提示。
PyCharm的GUI交互是在原生Git逻辑之外做了封装,默认会拦截跨分支携带未提交改动的行为,主动给用户提供提交、存储、丢弃改动的选项,两者的默认行为逻辑不同,并不是你对git checkout的语法使用有误。
复刻PyCharm「强制检出」的命令
要实现切换分支时直接丢弃当前所有未提交改动、直接加载目标分支的代码状态,有两种可选方案:
- 沿用
git checkout命令的话,增加-f(强制)参数即可:git checkout -f my_branch - Git 2.23及以上版本更推荐用语义更清晰的
git switch命令替代checkout做分支切换操作,对应强制命令为:git switch -f my_branch
拓展建议
如果不想丢弃改动,只是临时需要切换到其他分支处理事务,可以先执行git stash命令暂存当前未提交改动,切换回原分支后再执行git stash pop即可恢复所有改动,避免改动意外带入其他分支。
内容的提问来源于stack exchange,提问作者Tms91
相关产品推荐
相关产品推荐

