Android开发者必看:Git使用过程中的一些常见场景问题总结
10. 加入过历史版本的文件,因某些原因被删除了想恢复
git checkout <commit_id> – <file_name>
另外你也可以用reset命令来完成
11. 需要单独把多次提交中的某一次提交从你的分支迁移到另外一个分支上,即跨分支应用commit
git cherry-pick <commit_id>
比如:我想把以下分支
A-B master
C-D-E-F-G develop
中的D,F 两次提交移动到master分支,而保持其他commit不变,结果就像这样
A-B-D-F master
C-E-G develop
那么,思路是将D,F 用cherry-pick应用到master分支上,然后将develop分支对master分支变基。
$ git checkout master
$ git cherry-pick D
$ git cherry-pick F
$ git checkout develop
$ git rebase master
注意有些情况下使用cherry-pick会存在冲突,解决方法和我们平时合并分支遇到冲突一样。
12. 遇到文件冲突,可以手动解决,或者用你配置的工具解决,记得把文件标位resolved:add/rm
如:常见的拉取同事的代码合并引起冲突
1. 手动处理冲突
2. 文件标志位置为resolved:git add <file_name>
3. 继续合并 git merge --continue
当然也可以选择放弃合并:git merge --abort
13. 让自己本地分支上面的每一次提交日志变得更有意义,有时候需要我们选择有意义的提交日志信息合并上去
比如我们在bugfix分支上面由于修改bug提交了很多次,修复好了之后,我们想把这些提交合并入我们的master分支
git checkout master
git merge --squash bugfix
git commit -m “bug fixed”
上面操作会将bugfix分支上的所有commit都合并为一个commit,并把它并入我们的master分支上去。这里还有一点需要注意的是:–squash含义代表的是本地内容与不使用该选项的合并结果相同,但是不提交,不移动HEAD指针,所以我们要另外多一条语句来移动我们的HEAD指针,即最后的commit。
14. 有时候需要整理我们本地的commits,可以使用Squash
git rebase -i
举例:
git rebase -i HEAD~5
执行完后,Git会把所有commit列出来,让你进行一些修改,修改完成之后会根据你的修改来rebase。HEAD-5的意思是只修改最近的5个commit。
pick 033beb4 b1
pick b426a8a b2
pick c216era b3
pick d627c9a b4
pick e416c8b b5
Rebase 033beb4…e416c8b onto 033beb4
Commands:
p, pick = use commit
r, reword = use commit, but edit the commit message
e, edit = use commit, but stop for amending
s, squash = use commit, but mel
《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享
d into previous commit
f, fixup = like “squash”, but discard this commit’s log message
x, exec = run command (the rest of the line) using shell
If you remove a line here THAT COMMIT WILL BE LOST.
However, if you remove everything, the rebase will be aborted.
上面pick是要执行的commit指令,另外还有reword、edit、squash、fixup、exec这5个,具体的含义可以看上面的注释解释,比较简单,这里就不说了。 我们要合并就需要修改前面的pick指令:
pick 033beb4 b1
squash b426a8a b2
squash c216era b3
squash d627c9a b4
squash e416c8b b5
也就是下面这4个提交合并到最前面的那个提交里面,按esc,打上:wq提交保存离开。 接着是输入新的commit message
b
This is a combination of 2 commits.
The first commit’s message is:
b1
This is the 2nd commit message:
b2
This is the 3rd commit message:
b3
This is the 4th commit message:
b4
This is the 5th commit message:
b5
Please enter the commit message for your changes. Lines starting
with ‘#’ will be ignored, and an empty message aborts the commit.
Not currently on any branch.
Changes to be committed:
(use “git reset HEAD …” to unstage)
modified: a.txt
其中第一行的b就是需要我们输入的新信息,同样编辑完保存,出现类似下面的信息:
Successfully rebased and updated refs/heads/develop.
最后可以用git log指令来验证commits是不是我们要变成的样子。
15. 多人协作开发项目,想知道某个文件的当前改动情况
通常查问题时想知道某个文件的某部分代码是谁改动的,那么git blame 就派上用场了。
git blame <file_name>
你也可以具体指定到某一行或者某几行代码
git blame -L <start_line>,<end_line> <file_name>
16. 执行push命令向多个仓库同时提交代码
有时候会做代码备份,将代码保存在几个不同的Git代码管理平台,这时候就需要用到了
修改本地仓库目录下.git/config文件
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = true
[remote “origin”]
url = git@github.com:yuxingxin/blog.git
url = ……
url = ……
fetch = +refs/heads/:refs/remotes/origin/
如上 在remote处可以添加多个远程地址。
17. 从多次提交中快速定位某一次提交的bug
开始 bisect
$ git bisect start
录入正确的 commit
$ git bisect good xxxxxx
录入出错的 commit
$ git bisect bad xxxxxx
然后 git 开始在出错的 commit 与正确的 commit 之间开始二分查找,这个过程中你需要不断的验证你的应用是否正常
$ git bisect bad
$ git bisect good
$ git bisect good
…
直到定位到出错的 commit,退出 bisect
$ git bisect reset
总结
当然了,git的一些常见场景,还远不止这些,限于本人能力有限,如果你在平时的工作中遇到一些很实用的命令,也欢迎反馈给我,我好一并学习。更多的详细可以参考之前总结的一系列文档: https://devops.yuxingxin.com。 学习git命令是一件很有意思的事情,我想它能帮助使用git命令的人更好的理解这一代码管理工具,从而不至于犯一些低级错误,MobDevGroup网站上面也分享过几个学习命令的网站,可以供参考:https://mobdevgroup.com/tools/assistant
最后
除了Git工具的使用,我还整理了一份Android架构学习资料,这份资料包含当下字节跳动,腾讯等大厂重视的Android技术,还有这些大厂的面试真题和解析。
Android开发者必看:Git使用过程中的一些常见场景问题总结相关推荐
- bisect git 使用_Git使用过程中的一些常见场景问题总结
之前在公司内部推Git,写了一份git使用教程,后来又在团队内部做了一次分享,内容是关于Git使用过程中经常会遇到的一些场景,并有了这份总结. git基础 基于feature的工作流 添加忽略文件 . ...
- Android RecyclerView 绘制流程及Recycler缓存,Android开发者必看避坑指南
- mState.mIsMeasuring = false; if (mState.mLayoutStep == State.STEP_START) { dispatchLayoutStep1(); ...
- android开发方向知乎,Android开发者必看:知乎开源的图片选择库
前言 在实际开发中,图片选择器一直都是必不可少的一个部分,不管是 QQ 头像的设置,还是发送一条装逼的微信朋友圈,都要用到图片选择器来给用户选择他们想要上传的图片,最近知乎开源了一款图片选择库 Mat ...
- Android 开发者必知的开发资源
英文原文:Bongzimo 翻译: ImportNew-黄小非 译文链接:http://www.importnew.com/3988.html Android 开发者必知的开发资源 随着Androi ...
- android音频系统(7):通话过程中的音频输出设备切换
前言:由于通话比较特殊,Android对于通话过程中音频输出设备的切换做了特殊处理,它在上层也是通过切换音频播放状态来完成切换操作的,android用CallAudioState来封装通话过程中的音频 ...
- 3月18日云栖精选夜读 | 开发者必看!探秘阿里云Hi购季开发者分会场:海量学习资源0元起!...
[点击订阅云栖夜读周刊] 开发者分会场致力于帮助开发者学习了解阿里云最新技术,为开发者设计全方位的技术成长与进阶之路. 热点热议 开发者必看!探秘阿里云Hi购季开发者分会场:海量学习资源0元起! 作者 ...
- 3月18日云栖精选夜读 | 开发者必看!探秘阿里云Hi购季开发者分会场:海量学习资源0元起!... 1
[点击订阅云栖夜读周刊] 开发者分会场致力于帮助开发者学习了解阿里云最新技术,为开发者设计全方位的技术成长与进阶之路. 热点热议 开发者必看!探秘阿里云Hi购季开发者分会场:海量学习资源0元起! 作者 ...
- 8月22日云栖精选夜读 | Java开发者必看!机器学习开发库精选!
本文将介绍一些目前流行的.强大的基于Java的机器学习库. 热点热议 Java开发者必看!机器学习开发库精选! 作者:[方向] 学界 | 不!机器学习才不只是统计学的美化! 作者:技术小能手 发表在 ...
- Android开发必看知识,不看后悔
Android开发必看知识,不看后悔 打包为大家奉上最实用最给力的资源,不看你绝对后悔. 最强大的UI特效 奇艺高清UI界面源代码 http://www.eoeandroid.com/thread-1 ...
最新文章
- 华为诺亚方舟开源预训练模型“哪吒”,4项任务均达到SOTA
- 【专家观点】刘经南院士:北斗+5G为何能引领新基建?
- 排查链接是否失效_Linux服务器入侵检测排查方法
- SSM + AJAX + JSON 动态下拉框
- 11.1.5 练习题
- 常用的sql语句用法
- VS2010与.NET4系列 19.ASP.NET4中新的HTML编码的%: %语法
- 基于Android的家庭学校联系平台APP开发与实现
- RecyclerView多条目加载
- 计算机更新后无法远程,重装系统后无法进行远程桌面连接怎么办
- 国密算法分类及介绍(sm系列密码算法)
- vtp服务器作用,VTP
- win10 labelme 使用记录
- 手机访问电脑的静态文件(html...)(anywhere)
- 遇见你,是我幸福的开始
- 笔记本硬盘读取测试软件,电脑硬盘怎样检测 电脑硬盘故障检测软件【详解】...
- 01信息搜索:全面、快速查找全网你想要的任何信息、情报.
- APP 信息管理平台——需求概述
- mes系统 mysql 开发_MES系统集成方式
- git push 到github时,报错:ERROR: Permission to xxx.git denied to sb.
热门文章
- 有哪些可以打印试卷的平台?
- 超级应用程序的图标设计系统
- HTC终端4G网络附着问题
- java相册管理_基于jsp的相册管理系统-JavaEE实现相册管理系统 - java项目源码
- 基于SSM框架的酒店管理系统
- 【Unity资源】(粒子系统)
- 小马哥---山寨仿苹果6 主板型号E255 低端仿机 芯片6571 拆机主板图与开机界面图
- oracle lmd0,用strace跟踪分析oracle 10.2.0.1 rac lmd进程系列二
- NRF52x开发环境搭建详解
- 上了大学,要记得多打电话和爸妈唠嗑