执行git checkout切换到master时未提交的本地修改为什么未报错自动同步?
Git切换分支未报错且携带未提交修改的原因
Git 设计的分支切换逻辑就是:如果工作区、暂存区的未提交修改和目标分支的对应文件版本不存在冲突,Git 会自动将这些未提交的修改带到目标分支,不会抛出拦截错误,仅会在切换完成后提示存在未提交的修改。
针对该场景的具体逻辑如下:
- 在master分支提交hello.txt后,创建并切换到new_branch时,两个分支的hello.txt版本完全一致,都是内容为
pulkitsharma的提交版本 - 在new_branch修改hello.txt后未做暂存、提交操作,该修改属于已跟踪文件的未提交变更
- 切换回master时,master分支的hello.txt版本和切出new_branch时的版本完全相同,修改内容和master分支的文件版本没有冲突,因此Git直接将该修改同步到了master分支的工作区,输出
M hello.txt Switched to branch 'master'完成提示。
什么时候切换分支会触发报错拦截?
只有当未提交修改和目标分支的对应文件版本存在内容冲突时,Git才会抛出错误,要求你先通过提交、储藏、丢弃的方式处理完当前修改后再执行分支切换操作。
操作复现代码
git init vi hello.txt git add . git commit -m "hello.txt added to master branch" git checkout -b new_branch vi hello.txt git checkout master
内容的提问来源于stack exchange,提问作者Pulkit Sharma
相关产品推荐
相关产品推荐

