Android studio中Git的学习和使用心得(二)在Android studio中如何使用Git进行代码回退与再提交

这篇博客是上篇博客的进阶,针对Android studio常用的Git使用情景进行总结。上篇博客链接https://blog.****.net/qq_34820468/article/details/83344982。
下面我们来学习Android studio使用git的进阶:
1、本地代码(workspace)、本地仓库(repository)、远程仓库(remote)的关系
Android studio中Git的学习和使用心得(二)在Android studio中如何使用Git进行代码回退与再提交
上篇博文中我们演示的是add-commit-push,此外还有一个非常常用的是pull命令,将远程仓库的内容pull到本地
2、多人同时修改了同一文件,在push时出现冲突的解决方法
工作过程中经常会出现这样的状况:你与同事同时进行开发,你们都有修改代码,如果你在push时你push的文件与你同事之前push的内容有相同的某个文件,那么你的push必定会出错,这时你就需要以下几个步骤:
(1)将自己修改的部分commit到本地仓库
(2)pull远程代码,pull成功之后,Android studio会提醒你需要merge,merge页面分为三栏,左边是你的修改,右边是你同事所push的修改,中间是你们解冲突的结果,你需要对每一个冲突选择接纳与否,完成之后就可以确定了,你的本地代码就会变成中间的这部分
(3)接下来就是将本地代码进行commit和push了(如果push仍出错,说明在你pull到push之间又有同事提交了与你修改了同一文件的代码,你需要将最新的代码pull下来,并与你的代码进行merge之后才能成功push)
3、commit与push的关系
1)可能在push之前你已经commit了多次,那么各个push文件的最后一次commit(各文件可能不是同一次)的结果,你可以理解为commit表示将修改保存到本地仓库,而push就是将本地仓库所有的commit无一遗漏的全部都提交到远程仓库。例如,你第一次commit了文件1、文件2、文件3,第二次commit了文件1、文件2,第三次commit了文件1,那么这时你push(无论你push时选择了几个文件,push都会将上次push到这次push之间所有commit了的文件置为最后一次commit的样子)出去的文件1是第三次commit的样子,文件2会是第二次commit的样子,文件3会是第一次commit的样子。
2)push只会提交commit的修改结果,没有提交到commit的修改不会push到远程仓库。例如,你在commit之后对代码进行了修改,接着push了,那么这个修改不会push到远程仓库
3)在push时你没有权利选择你想要或者不想要push的文件,也不能选择只push部分commit而忽略一部分commit,你只能默认将所有commit都push。但如果只想push部分修改了的文件(例如你与项目中其他人的gradle版本不同,你只修改了你的,但是你并不能把它提交,因此,你就不能push这个文件),那么你在commit的时候就只选择你想push的文件,不要选择你不想push的文件,不然你不想push的文件被commit的了,该文件最终也会被push,造成不必要的麻烦
4、代码回退
如何将代码回退到之前的版本。例如你这几天在写一个小功能,但是你的领导突然告诉你,你写的这个功能我们打算去掉,虽然心里一万个mmp,但是你能做的就是删掉你的代码,那你总不能一行一行找这几天写了哪些,然后删吧,工作量巨大,还容易漏删。这时,你就应该要会怎么回退代码,如果你这几天的代码只是commit了,并没有push,那你只需要回退commit,然后再pull远程代码就OK啦,集体是下面的1)方法;但如果你已经push出去了,那如何回退push呢?首先你可以选择修改之后再push提交(这个太麻烦,强烈拒绝),其次你可以选择revert push到某一版本,具体怎么做呢?2)会教你具体的做法
1)回退没有push的commit
如果你commit错了,想回到之前的状态,那么你可以选择右键-Git-Repository-Reset HEAD,然后会弹出下面的对话框,其中在to Commit中填入“HEAD~1"表示回退一次commit,把1变成2表示回退两次commit,依次类推(注意回退commit并不会影响Android studio中代码的显示,因为回退了commit只是修改了本地仓库,对本地代码并没有影响,但是你回退了commit之后,在选择push时就会发现你回退的commit不见了)
Android studio中Git的学习和使用心得(二)在Android studio中如何使用Git进行代码回退与再提交
Android studio中Git的学习和使用心得(二)在Android studio中如何使用Git进行代码回退与再提交
2)回退push
在Android studio下方的Version Control(如果没有,可以选择在在左边项目栏任何位置右键-Git-show History)中选择log,找到你想退掉的push,右键-Revert(有时候会需要让你merge)即可退回本次提交的东西,但是注意了,仅仅是退回本次的修改,对于本次push之后的修改内容不受影响。例如我先push了一个注释第一部分,再push了一个注释第三部分,然后push一个注释第二部分,我在注释第一部分的地方右键-revert,然后push上去,结果远程仓库的变化是仅仅退回了这一次的修改,也就是变成第一部分不是注释,但第二部分和第三部分全部都还是注释。
(1)对第一部分注释,并进行第一次commit and push
Android studio中Git的学习和使用心得(二)在Android studio中如何使用Git进行代码回退与再提交
(2)对第三部分注释,并进行第二次commit and push
Android studio中Git的学习和使用心得(二)在Android studio中如何使用Git进行代码回退与再提交
(3)对第二部分注释,并进行第三次commit and push
Android studio中Git的学习和使用心得(二)在Android studio中如何使用Git进行代码回退与再提交
(4)然后我在第一次提交的地方进行revert回退
Android studio中Git的学习和使用心得(二)在Android studio中如何使用Git进行代码回退与再提交
会弹出这样的对话框,接着进行commit和push(这部分很简单,没什么选的,就不放图了)
Android studio中Git的学习和使用心得(二)在Android studio中如何使用Git进行代码回退与再提交
然后本地代码和远程仓库代码会变成这样
Android studio中Git的学习和使用心得(二)在Android studio中如何使用Git进行代码回退与再提交
Android studio中Git的学习和使用心得(二)在Android studio中如何使用Git进行代码回退与再提交
以上结果说明什么,说明了revert是提交新的修改,来仅仅回退你选择revert的push的那次修改,对于其他的push的修改内容是没有任何影响的
还得说明一下,前面的例子中三次push的内容没有重叠的部分,也就是没有哪一部分代码被重复修改,如果你revert的版本修改的内容在后续的push中有被再次修改,那么你revert的时候系统会要让你进行merge,中间的result就是你最终代码的样子,完了之后再push一次,远程代码也会变成你本地的样子,也就完成了你想要的回退。
Android studio中Git的学习和使用心得(二)在Android studio中如何使用Git进行代码回退与再提交
Android studio中Git的学习和使用心得(二)在Android studio中如何使用Git进行代码回退与再提交
Android studio中Git的学习和使用心得(二)在Android studio中如何使用Git进行代码回退与再提交
这时你在第一次提交的地方revert,那会弹出这样的对话框
Android studio中Git的学习和使用心得(二)在Android studio中如何使用Git进行代码回退与再提交
然后选择merge,左边local changes是本地代码,右边Changes from Server代表“合并进来”的分支上的修改,对两边的冲突选择接受与否,结果在中间,确定之后,commit and push就可以实现本地和远程仓库代码回退到自己想要的样子。
Android studio中Git的学习和使用心得(二)在Android studio中如何使用Git进行代码回退与再提交
最近学习和工作所遇到的情况,暂时就总结到这里,以后有其他情况再来补充。