Xcode 9存在未提交变更时无法切换分支的解决方案咨询
解决方案:无需提交即可转移/保存变更并切换分支
你遇到的这个场景太典型了——临时起意改代码忘了切分支,结果一堆变更卡着没法换分支。完全不用被迫把这些无关变更提交到当前分支,有两个非常实用的方法解决:
方法1:用Git Stash临时保存变更(适合临时切换分支再回来继续)
Git Stash就像一个“变更暂存箱”,能把当前工作区的所有未提交变更暂时存起来,让工作区回到干净状态,这样你就能自由切换分支了。
命令行操作:
- 先保存当前变更:
(加git stash push -m "临时保存新功能开发的变更"-m是给这个stash加个备注,方便之后快速识别) - 现在可以正常切换分支了,比如切到主分支:
git checkout main - 之后要回到之前的变更继续开发,只要把stash取出来:
(git stash poppop会把stash里的变更恢复到工作区,同时删除这个stash;如果只是想查看不想删除,用git stash apply)
Xcode 9里的可视化操作:
- 打开Xcode的Source Control菜单,选择Stash Changes...
- 在弹出的窗口里给这个stash加个描述(比如“新功能临时暂存”),点击Stash就搞定了
- 现在去Source Control里切换分支就不会有阻碍了
- 要恢复变更的话,回到Source Control菜单,选择Stashes,找到你刚才存的那个stash,右键选择Apply Stash或者Pop Stash就行
方法2:直接基于当前变更创建新分支(更适合把变更转移到正确的分支)
既然你本来就应该在新分支开发这个功能,那直接一步到位,基于当前的工作状态创建新分支,这样所有未提交的变更会自动带到新分支上,原来的分支就回到干净状态了。
命令行操作:
- 创建并切换到新分支:
(git checkout -b feature/new-functionalityfeature/new-functionality是分支名,你可以改成自己习惯的命名) - 现在你就在新分支上了,所有之前的变更都在这个分支里,之后正常提交就行
- 如果要切回原来的分支,直接
git checkout 原分支名,原来的分支是干净的
Xcode 9里的可视化操作:
- 打开Xcode的Source Control菜单,选择New Branch...
- 在弹出的窗口里输入新分支的名字(比如
feature-new-function),然后确保勾选Create branch from current state(Xcode9里这个选项默认是勾选的,没勾的话一定要补上) - 点击Create,之后Xcode会自动切换到这个新分支,你的所有未提交变更都会跟着过来
- 现在你就可以在正确的分支上继续开发和提交了,原来的分支不受影响
小提醒
- 如果用Stash的话,记得别把stash忘在脑后了,时间长了可能会搞混哪个stash对应哪个变更,所以加备注很重要
- 方法2其实更贴合你的场景,因为本来就应该在新分支开发,直接把变更转移过去一步到位,省得之后还要恢复stash
内容的提问来源于stack exchange,提问作者Tigran Iskandaryan
相关产品推荐
相关产品推荐

