切换Git分支后如何让本地文件与目标分支完全同步?
Git分支切换后工作区未匹配分支状态问题解答
认知误区澄清
git pull的本质是git fetch+git merge的组合命令,仅处理分支上已提交的记录,完全不会触碰本地未提交的变更(包括修改、删除、新增文件操作),所以不可能通过git pull实现工作区和分支状态的完全匹配。- 你遇到的file.c未恢复的核心原因:你在test分支删除file.c后没有提交这个删除操作,未提交的变更会在分支切换时默认被带到新分支,相当于你切到master后主动执行了删除file.c的未提交操作,自然看不到master分支上的该文件。
正确解决方案
场景1:test分支上的删除操作后续还要使用
切分支前先在test分支执行git stash暂存未提交的变更,暂存后工作区会恢复到test分支最后一次提交的状态,此时再切到master,工作区会完全匹配master分支的最新状态。等后续切回test分支时,执行git stash pop即可恢复之前的删除操作。
场景2:test分支上的删除操作不需要保留
两种操作可选:
- 切换分支前,在test分支执行
git reset --hard HEAD清空不需要的未提交变更,再切换到master即可 - 若已经切到master才发现带了多余的变更,确认master上的未提交变更都不需要的前提下,执行
git reset --hard HEAD就是完全正确的操作,没有问题。
补充说明
如果未提交的变更和目标分支的对应文件内容存在冲突,Git会直接拒绝分支切换操作,要求你先处理未提交变更(提交/暂存/丢弃),不会允许变更被带到目标分支。
内容的提问来源于stack exchange,提问作者Brydon Gibson
相关产品推荐
相关产品推荐

