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

这篇博客是上篇博客的进阶,针对Android studio常用的Git使用情景进行总结。上篇博客链接https://blog.csdn.net/qq_34820468/article/details/83344982。
下面我们来学习Android studio使用git的进阶:
1、本地代码(workspace)、本地仓库(repository)、远程仓库(remote)的关系
在这里插入图片描述
上篇博文中我们演示的是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不见了)
在这里插入图片描述
在这里插入图片描述
2)回退push
在Android studio下方的Version Control(如果没有,可以选择在在左边项目栏任何位置右键-Git-show History)中选择log,找到你想退掉的push,右键-Revert(有时候会需要让你merge)即可退回本次提交的东西,但是注意了,仅仅是退回本次的修改,对于本次push之后的修改内容不受影响。例如我先push了一个注释第一部分,再push了一个注释第三部分,然后push一个注释第二部分,我在注释第一部分的地方右键-revert,然后push上去,结果远程仓库的变化是仅仅退回了这一次的修改,也就是变成第一部分不是注释,但第二部分和第三部分全部都还是注释。
(1)对第一部分注释,并进行第一次commit and push
在这里插入图片描述
(2)对第三部分注释,并进行第二次commit and push
在这里插入图片描述
(3)对第二部分注释,并进行第三次commit and push
在这里插入图片描述
(4)然后我在第一次提交的地方进行revert回退
在这里插入图片描述
会弹出这样的对话框,接着进行commit和push(这部分很简单,没什么选的,就不放图了)
在这里插入图片描述
然后本地代码和远程仓库代码会变成这样
在这里插入图片描述
在这里插入图片描述
以上结果说明什么,说明了revert是提交新的修改,来仅仅回退你选择revert的push的那次修改,对于其他的push的修改内容是没有任何影响的
还得说明一下,前面的例子中三次push的内容没有重叠的部分,也就是没有哪一部分代码被重复修改,如果你revert的版本修改的内容在后续的push中有被再次修改,那么你revert的时候系统会要让你进行merge,中间的result就是你最终代码的样子,完了之后再push一次,远程代码也会变成你本地的样子,也就完成了你想要的回退。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这时你在第一次提交的地方revert,那会弹出这样的对话框
在这里插入图片描述
然后选择merge,左边local changes是本地代码,右边Changes from Server代表“合并进来”的分支上的修改,对两边的冲突选择接受与否,结果在中间,确定之后,commit and push就可以实现本地和远程仓库代码回退到自己想要的样子。
在这里插入图片描述 最近学习和工作所遇到的情况,暂时就总结到这里,以后有其他情况再来补充。