git checkout 对工作目录的影响 —— Git 学习笔记 21
git checkout 对工作目录的影响
问题的提出
本文要讨论的是:当我们用git checkout <branch_name>
命令切换分支时,如果有未提交的修改,会发生什么?
如果当前工作区的状态是“clean”,那么切换到其他分支是很容易的。但是,如果有未提交的修改,也许就不能顺利地切换过去,Git 会给出错误信息。例如:
$ git branchbug/pr-1bug/pr-2dev* master$ git checkout deverror: Your local changes to the following files would be overwritten by checkout:NewStuffPlease, commit your changes or stash them before you can switch branches.Aborting
Git 提示我们:要么提交所有的修改,要么用 stash 命名把这些修改储藏起来。
让人费解的是,Git 也不是每一次都这样阻止我们切换分支。比如当我们基于活跃分支的最近一次提交创建一个新分支的时候,不管本地有没有未提交的修改,我们都可以切换到新分支,这又是为何呢?
原理初探
假设你当前在分支 branch1, 你想切换到分支 branch2,于是你输入命令
git checkout branch2
对于你的工作区来说,这条命令意味着什么呢?
- 对于每一个在分支1但是不在分支2的文件,Git 会删除它们;
- 对于每一个在分支2但是不在分支1中的文件,Git 会创建它们(用合适的内容);
- 对于每一个既在分支1又在分支2的文件,如果版本不同,那么 Git 会更新工作区的文件,使之和分支2的版本匹配。
上面的每一步都有可能破坏你当前的工作区(工作区和暂存区对于每个分支是共用的)。
对于1,删除一个文件,如果这个文件在工作区的版本和它在分支1的版本是一致的,那么删除它就是安全的;如果你修改了它,还没有提交,那么删除就是不安全的;
对于2,创建一个文件,如果工作区还不存在这个文件,那就是安全的;如果工作区已经有这个文件,但是内容是“错”的,那么就不安全;
对于3,如果这个文件已经提交,那么就是安全的;如果被修改了,且没有提交,那么就不安全;
注意:用命令git checkout -b <newbranch>
创建并切换到一个新分支总是“安全”的:没有文件被创建,也没有文件被删除,也没有文件被更新,索引也没有任何改变。
但是用git checkout -b <newbranch> <start_point>
就不一样了。Git 会应用上述的安全检查规则。
参考资料
https://stackoverflow.com/questions/22053757/checkout-another-branch-when-there-are-uncommitted-changes-on-the-current-branch
git checkout 对工作目录的影响 —— Git 学习笔记 21相关推荐
- git 工程工作目录下的git相关文件解释
git 工程工作目录: 首先看下 gitreview [gerrit] host=10.37.77.181 port=29418 project=volcano.git 里面是git本地服务的ip和端 ...
- 【目录】Django-2.0 学习笔记
django 学习笔记目录 web应用-http协议-web框架 django 简介 django-2 的路由层 django 的视图层 django 模板层template django 模型层or ...
- MapReduce工作原理详解(学习笔记)
本文参考以下文章,作出归纳总结,以供日后参阅. [1] https://blog.csdn.net/zhengwei223/article/details/78304764 [2] https://w ...
- SAP在物流工作中的应用之学习笔记
1.SAP SAP是一个德国的ERP软件,在很多外资企业,不管是制造工厂.贸易公司还是物流公司,都广泛的被使用.它在很大程度上影响甚至决定了这些企业的业务流程.组织架构和岗位设置. 2.END USE ...
- 《浏览器工作原理与实践》学习笔记
浏览器原理 前言 本文是学习李兵老师的<浏览器工作原理与实践>过程中记录笔记,详细链接见文末 进程vs线程 进程:一个应用程序的运行实例就是一个进程,详细来说就是:启动一个应用程序的时候, ...
- Python学习笔记(21)-目录遍历
点此查看 零基础Python全栈文章目录及源码下载 本文目录 1. 简介 2. 实例 1. 简介 遍历一个目录下所有的文件夹和文件是非常有用的事情,在python中os模块提供了非常简单易行的遍历方法 ...
- 目录穿越/遍历漏洞 -- 学习笔记
目录 什么是目录遍历? 漏洞原理 实验 0x00 基础目录遍历 0x01 绝对路径 0x02 双写../绕过 0x03 URL编码绕过 0x04 绝对路径配合../ 0x05 截断文件后缀 ...
- Git超详细学习笔记 手把手带你一步一步操作 -- 详细分析git 对象-域-分支以及github使用
Git 使用笔记 详细的说明文档: 请参考安装目录下的doc文档 D:\Program Files\Git\mingw64\share\doc\git-doc\git-stash.html git 版 ...
- Git之深入解析如何贮藏工作分支与清理工作目录
一.前言 了解了管理或者维护 Git 仓库.实现代码控制所需的大多数日常命令和工作流程,尝试跟了踪和提交文件的基本操作,并且掌握了暂存区和轻量级地分支及合并的威力.如果想进一步对 Git 深入学习,可 ...
最新文章
- 关于编程的浅学习与深学习
- python输入函数后无法运行_python - 如何在函数运行期间忽略所有用户输入?_python_酷徒编程知识库...
- Redis运维优化的陷阱及避坑指南
- 通俗易懂理解GBDT算法原理-转
- 大脑是怎样和身体交流的?
- python条件语句-Python if else条件语句详解
- 《数据库原理与应用(第3版)》——1.4 数据库系统的组成
- java操作mongodb_Java操作MongoDB
- 微软官方工具_时隔20年再出发!微软官方推出最强Windows工具集
- java EXCEL或WORD转PDF转图片(base64)
- 干部人事数字档案管理系统,实现从“纸件”到“指尖”的安全蜕变
- 姓氏头像制作生成头像组合微信小程序源码
- matlab设计计算器,MATLAB-计算器的设计.doc
- Web2.0与Web3.0的区别是什么
- android banner设置图片比例,Banner基本使用 2.1.0
- 在Windows本地安装ElasticSearch和Kibana
- 西南大学网络作业答案计算机,2019西南大学继续教育学院《计算机基础》作业答案...
- java timeunit_java – 了解TimeUnit
- String常用方法!
- 使用ICSharpCode.SharpZipLib对文件进行压缩或解压
热门文章
- C++ 之 贪吃蛇
- 各常用分类算法的优缺点总结:DT/ANN/KNN/SVM/GA/Bayes/Adaboosting/Rocchio
- C# 程序执行时间差
- linux 系统调用分析
- python取出字典中的所有值的两种方法
- ACM学习历程—Hihocoder [Offer收割]编程练习赛1
- tomcat下list所有文件的目录
- 『转载』|收藏|一张看懂AI知识体系
- Linux之特殊权限(SUID/SGID/SBIT)
- 莱斯分布概率分布曲线