这篇博客是上篇博客的进阶,针对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就可以实现本地和远程仓库代码回退到自己想要的样子。

最近学习和工作所遇到的情况,暂时就总结到这里,以后有其他情况再来补充。

更多相关文章

  1. NPM 和webpack 的基础使用
  2. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
  3. 读取android手机流量信息
  4. android EditText设置不可写
  5. android 使用html5作布局文件: webview跟javascript交互
  6. android studio调试c/c++代码
  7. android Dialog大小修改
  8. Android(安卓)多媒体扫描过程(Android(安卓)Media Scanner Proces
  9. android“设置”里的版本号

随机推荐

  1. android-R.attr(三)
  2. android Notification 代码备份
  3. Android(安卓)view lifecycle
  4. OpenGL 3D骰子
  5. Android(安卓)Studio中http请求方式
  6. android click事件注解
  7. React Native In Android
  8. Android(安卓)layout in code
  9. android滑动标题栏渐变实现
  10. Android(安卓)Spinner 下拉列表