相信用过sourceTree的伙伴们都认识这两,但是不一定用过这两个功能,甚至是不能很好的把握它两的区别,根据自己最近亲身测试,总算是能小小的总结一下了
![5613fbd131861176d168bc2012960733.png](https://i-blog.csdnimg.cn/blog_migrate/c445894675e279a5517ccef296c7c224.jpeg)
首先这儿假如,历史版本已经出现了1、2、3、4、5、6、7、8、9,当前的版本是9,讲述执行上面两种操作,分别会有什么效果
1.提交回滚
假如我选中6,执行“提交回滚”之后,你会发现7,8,9的历史操作还在,只是将6的操作还原了,这时候需要注意的是7、8、9的操作会引起提交回滚6的时候产生冲突
2.将master重置到这次版本
假如我选中6,执行“将master重置到这次版本”之后,你会发现这个时候历史列表显示落后4个版本,而且显示出了6中所有的文件变更,相当于回到当时准备提交的状态,这个时候如果你去推送是会报错的,显示的意思就是有要拉取的,但是如果你去拉取的话,你会发现又还原了,又回复重置之前,那怎么办,肯定是只能推送了,通过查阅资料,才知道这个时候需要修改sourceTree的设置,才能执行强制推送
注意::在这里我建议需要的时候开启强制推送,用完就关闭(开启方法:sourceTree->偏好设置->通用->勾上“允许强制推送”)
![dfd383dcd9a1d2ccb00f326ccbedf2e9.png](https://i-blog.csdnimg.cn/blog_migrate/6015cddadfdf3c3d6fa5f76e3949b979.jpeg)
别以为这样就够了,如果你在设置之后强制推送还是显示失败,显示信息如下:
! [remote rejected] master -> master (pre-receive hook declined)
最后查阅资料才知道git push不上去的原因在于所push的分支权限为protected,只有项目的管理员或者项目的管理员指派的具有相应权限的人才能进行push,而且默认情况下【master】分支是处于被保护状态下的,要进行项目的push,有如下两种方法:
1.将所要push的内容所在的分支的protected权限关闭
(1)进入所在项目的settings,点击进入Protected branches,点击unprotected将master分支的权限改变,即关闭master的protected权限
![75b29c7d02f4fb23a0ad690b3ce79532.png](https://i-blog.csdnimg.cn/blog_migrate/c85b1edf550d27abe9b41287e8f62c67.jpeg)
2.新建其它分支,将项目push到新建的分支上,后期再进行merge
(1)新建分支
git branch 分支名 (2)切换分支
git checkout 分支名 (3)进行项目上传
git add .
git commit -m "提交的信息"
git remote add origin 远程仓库地址
git push -u origin 分支名