1.回滚已经commit的代码
对于commit(不是push)的代码如何回滚,这块对于刚转到git的开发者还是比较陌生的。今天我来说下这块的内容:
按照惯例,先上图,下图是还没有commit任何代码的push界面,这个时候是没有commit任何内容的:
然后我修改了string.xml的内容,并且执行了commit操作:
接下来就要说如何进行revert commit了,通过选中工程,点击右键,在弹出的列表中选择Git–>Repository–>Reset HEAD…,有些人可能会说我右键弹出来的列表中没有发现有Git的选项,这个可以配置的,请戳这:
这边对上图进行分析:
Git Root:选择你要revert的目录
Current Branch:你当前在哪个branch
Reset Type:
Soft:选择这个模式意思是仅仅撤销commit而已,不影响你本地的任何文件,也不影响(index)缓存区的任何文 件。
Hard:不仅撤销commit的内容,还将本地的文件指向你commit前的版本,同时index也会指向commit前的版本。
Mixed:这个模式从我个人角度来看其实还是有点模糊的。从我的角度理解就是只是回滚index,其余的都不变。
但是这边跟大家说下,如果你把HEAD后面加个“1”(HEAD1),这里的数字代表的是次数,比如你commit了三次, 你写1,就是回滚最后一次提交的,如果是2,就是后两次提交的都回滚。这时候你会发现它的功能和soft 这个模式一样了。
我把官方的说法贴上来吧:Resets the index but not the working tree (i.e., the changed files are preserved but not marked for commit) and reports what has not been updated. This is the default action.
Validate:这个选项是看当前会影响到的文件有哪些,具体影响是什么。
我这边执行下soft模式的,执行完成后,看下图,刚commit的记录已经没了:
当然你想用命令行也是一样的,
1 | git reset [--soft | --mixed [-N] | --hard] HEAD~X X:代表次数 |
3.git reset soft,hard,mixed之区别深解
其实就是–soft 、–mixed以及–hard是三个恢复等级。使用–soft就仅仅将头指针恢复,已经add的缓存以及工作空间的所有东西都不变。如果使用–mixed,就将头恢复掉,已经add的缓存也会丢失掉,工作空间的代码什么的是不变的。如果使用–hard,那么一切就全都恢复了,头变,aad的缓存消失,代码什么的也恢复到以前状态
4.cherry pick使用(合并某次提交)
需求:一般项目有分支 master,假如还有分支 branch1 和 branch2。如果我们的成员 A 在分支 branch1 上面修复了 bug2020 并提交,我们想在自己管理的分支 branch2 也同步这个修改提交的代码。
2
首先我们需要在 Android Studio 中先把分支切换到我们需要进行修改的分支 branch2 上面。(在需要修改的分支进行代码提交操作)
3
然后在 Android Studio 的下面找到 Version Control 内置版本控制工具,切换到分支 branch1,并且找到想要同步的提交。在 Version Control 中找到我们要同步的提交,选中后鼠标右键点击 Cherry-Pick。
4
然后就会出现下面这样的图片,接着我们就发现我们需要的代码已经修改到我们的 branch2 上面了,接着我们点击提交就可以了。这样我们就顺利的完成了把 branch1 上修改同步到 branch2 的操作。
5
当然有时候可能没有那么顺利,我们中间有可能遇到一些冲突,这个时候需要我们手动处理了冲突之后,才能够继续下一步。