git checkout
另外你也可以用reset命令来完成
git cherry-pick
比如:我想把以下分支
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会存在冲突,解决方法和我们平时合并分支遇到冲突一样。
如:常见的拉取同事的代码合并引起冲突
1. 手动处理冲突
2. 文件标志位置为resolved:git add
3. 继续合并 git merge --continue
当然也可以选择放弃合并:git merge --abort
比如我们在bugfix分支上面由于修改bug提交了很多次,修复好了之后,我们想把这些提交合并入我们的master分支
git checkout master
git merge --squash bugfix
git commit -m “bug fixed”
上面操作会将bugfix分支上的所有commit都合并为一个commit,并把它并入我们的master分支上去。这里还有一点需要注意的是:–squash含义代表的是本地内容与不使用该选项的合并结果相同,但是不提交,不移动HEAD指针,所以我们要另外多一条语句来移动我们的HEAD指针,即最后的commit。
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
《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享
d into previous commit
上面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
其中第一行的b就是需要我们输入的新信息,同样编辑完保存,出现类似下面的信息:
Successfully rebased and updated refs/heads/develop.
最后可以用git log指令来验证commits是不是我们要变成的样子。
通常查问题时想知道某个文件的某部分代码是谁改动的,那么git blame 就派上用场了。
git blame
你也可以具体指定到某一行或者某几行代码
git blame -L
有时候会做代码备份,将代码保存在几个不同的Git代码管理平台,这时候就需要用到了
修改本地仓库目录下.git/config文件
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = true
[remote “origin”]
url = [email protected]:yuxingxin/blog.git
url = ……
url = ……
fetch = +refs/heads/:refs/remotes/origin/
如上 在remote处可以添加多个远程地址。
$ git bisect start
$ git bisect good xxxxxx
$ git bisect bad xxxxxx
$ git bisect bad
$ git bisect good
$ git bisect good
…
$ git bisect reset
当然了,git的一些常见场景,还远不止这些,限于本人能力有限,如果你在平时的工作中遇到一些很实用的命令,也欢迎反馈给我,我好一并学习。更多的详细可以参考之前总结的一系列文档: https://devops.yuxingxin.com。 学习git命令是一件很有意思的事情,我想它能帮助使用git命令的人更好的理解这一代码管理工具,从而不至于犯一些低级错误,MobDevGroup网站上面也分享过几个学习命令的网站,可以供参考:https://mobdevgroup.com/tools/assistant
除了Git工具的使用,我还整理了一份Android架构学习资料,这份资料包含当下字节跳动,腾讯等大厂重视的Android技术,还有这些大厂的面试真题和解析。