Xcode 9.2版本控制:如何回退master分支至昨日版本并保留今日工作
解决方法:回退Master分支并保留今日工作到新分支
嘿,我完全懂你的处境——不小心把当天的工作提交到master分支,现在想把master拉回昨天的状态,同时把新代码留在专属分支里对吧?咱们一步步来搞定,确保万无一失:
第一步:确认新分支的安全性
首先得保证你今天的工作已经完整保存在新分支且推送到Bitbucket了:
- 切换到你的新分支(比如叫
today-feature):
要是用Xcode操作的话,就去「Source Control」→「Checkout Branch」里选你的新分支。git checkout today-feature - 用
git status或者Xcode的源码控制面板确认:没有未提交的改动,而且所有今日工作都在这个分支里,并且已经推送到远程了。
第二步:回退本地Master分支到昨日版本
接下来处理master分支:
- 切回master分支:
git checkout master - 找到昨天最后一个正常的commit哈希值:
执行git log --oneline会显示所有提交记录,找昨天最后那条的哈希(比如a1b2c3)。在Xcode里的话,打开「Source Control」→「History」,找到昨天的提交,复制它的SHA值。 - 硬重置本地master到这个commit:
⚠️ 重点提醒:git reset --hard a1b2c3--hard会彻底删除master分支里这个commit之后的所有改动,所以一定要确认新分支已经存好所有今日工作再执行!
第三步:推送回退后的Master到Bitbucket
因为你之前已经把错误的提交推到远程master了,现在本地master比远程版本旧,需要强制推送覆盖:
git push origin master --force
如果用Xcode推送时提示冲突,你需要先在Xcode的设置里开启强制推送选项(或者直接用终端更稳妥)。
第四步:验证结果
- 切换回master分支,查看代码是不是昨天的状态;再切回新分支,确认今日工作都完好。
- 打开Bitbucket的master分支页面,确认远程版本已经更新到昨天的状态。
小提醒
以后记得先建分支再干活:用git checkout -b 新分支名创建并切换到新分支,在上面提交推送,就不会再不小心污染master啦!如果有其他团队成员拉过你之前错误的master版本,一定要通知他们同步更新,避免代码冲突。
内容的提问来源于stack exchange,提问作者Chris_1983_Norway
相关产品推荐
相关产品推荐

