GitLab如何将本地master的未提交更改推送到正确Register分支
操作方案
你当前所有改动都停留在master分支的工作区,尚未产生任何提交记录,不会污染master分支,按以下步骤操作即可零风险把改动转移到目标Register分支:
方案1:stash暂存转移(推荐,零出错概率)
这个方案不管本地分支有没有版本差异都能用,是最稳妥的路径,命令行和SourceTree都能操作:
- 暂存当前所有改动:
命令行在仓库根目录执行:git stash push -u -m "临时存储误写在master的开发改动"
必须加-u参数,否则新增的未跟踪文件不会被纳入暂存,会残留或丢失。用SourceTree操作的话,点击顶部工具栏的「贮藏」按钮,勾选「贮藏所有未跟踪文件」选项,填写备注后确认即可。执行完这步本地master工作区会回到和远程master完全一致的干净状态,没有任何改动残留。 - 切换到目标Register分支:
命令行执行git checkout Register,或者在SourceTree左侧分支列表双击Register分支,确认当前分支切换正确。 - 恢复暂存的改动:
命令行执行git stash pop,SourceTree里找到左侧贮藏列表里刚存的那条记录,右键选择「应用贮藏」即可。所有之前修改的跟踪文件、新增的未跟踪文件会原封不动还原到Register分支的工作区。 - 正常提交推送:
确认文件改动无误后,按平时的流程add、commit,再push到远程Register分支就完成了,全程不会向master分支写入任何提交。
方案2:直接切换分支(操作更快,适合无文件冲突场景)
因为你还没在master提交改动,只要修改的文件在master和Register分支之间没有版本差异,Git允许你直接带着工作区改动切分支:
- 直接执行
git checkout Register,或者在SourceTree里双击切换到Register分支 - 切换完成后你会发现所有工作区改动(包括未跟踪文件)都保留在当前分支,直接正常提交推送即可。
注意:如果切分支时Git提示存在文件冲突、改动可能被覆盖,不要加参数强制切换,立刻退回用方案1操作,避免文件丢失。
关键避坑点
- 只要不在当前master分支执行commit操作,就不会产生任何污染master的提交记录,完全不用担心误推故障
- 执行stash操作时务必确认勾选/加参数包含未跟踪文件,避免新增文件丢失
- 恢复改动后先执行
git status确认当前分支为Register、改动文件列表和你之前的修改一致,再执行提交操作
内容的提问来源于stack exchange,提问作者Anilkumar iOS Developer
相关产品推荐
相关产品推荐

