博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
git 几个高级用法
阅读量:6413 次
发布时间:2019-06-23

本文共 2317 字,大约阅读时间需要 7 分钟。

1 cherry-pick

cherry-pick可用于把其他分支的commit,移到当前分支。

实践一下:

1 在master分支新建git.txt

2 在git.txt输入 “master第一次提交”

3 在master分支提交

git add git.txtgit commit -m 'master第一次提交'复制代码

4 基于master新建test分支

git checkout -b test复制代码

5 在git.txt加一行 “test第一次提交”

6 在test分支提交

git add git.txtgit commit -m 'test第一次提交'写法2: 此时git.txt已经add过了,可以用偷懒的写法git commit -am 'test第一次提交'复制代码

7 在git.txt加一行 “test第二次提交”

8 在test分支提交

git commit -am 'test第二次提交'复制代码

9 参照上面 4 ~ 8,基于master新建test2分支,在test2中也提交两遍。

此时,在master分支有一次提交,在test和test2分支有两次提交,如下图所示。

如果我们需要把test和test2分支的第一次提交移到master上,那么可以使用cherry-pick(注意:使用merge合并的方式会把所有提交合并过来,而这里我们只需要test和test2第一次提交)

使用git log查看test和test2中第一次提交的commit id,在cherry-pick中使用。

然后在master分支中cherry-pick

// 4d5a7b1 为test第一次提交的commit id, 3d56b9a为test2第一次提交的commit idgit cherry-pick 4d5a7b1 3d56b9a复制代码

此时如果无冲突,那么test和test2分支第一次提交的内容将会移到master中

如果有冲突,那么解决后使用git add,添加后再执行git cherry-pick --continue 

当然你也可以退出cherry-pick,使用git cherry-pick --quit 会退出cherry-pick,但是刚刚cherry-pick的结果会留下

如果你希望回到cherry-pick之前,那么可以使用 git cherry-pick --abort 

如果cherry-pick已经顺利执行完,而你又想回到cherry-pick之前,那么可以使用版本回退啦。

注意:

1 cherry-pick一个分支的多个commit时,请按顺序填写commit id,或者使用 "..." 限定范围,如下。

// 从start-commit-id 到 end-commit-id 不包含 start-commit-id git cherry-pick 
// 从start-commit-id 到 end-commit-id 包含 start-commit-idgit cherry-pick
^…
复制代码

2 假如有一个commit,是从其他分支合并过来形成的,那么cherry-pick这个commit将会报错,是因为git不知道取哪个分支的内容,使用-m选项即可。

error: commit fd30d42926885f792976a094b1aa0c96e8228240 is a merge but no -m option was given.复制代码

2 查看某个文件的历史

git log --all --full-history -- package-lock.json复制代码

--all 展示包括其他分支的所有历史

--full-history 查看某个文件历史时,git会自动简化历史(),甚至会隐藏一些提交。--full-history可以关闭History Simplification。

3 --allow-unrelated-histories

git 2.9 后默认不允许合并两个不相关的没有共同祖先的分支,比如新建本地仓库,新建github仓库,本地仓库 git remote add origin <repository url> ,然后git pull origin master,会报错。

fatal: refusing to merge unrelated histories复制代码

可以使用--allow-unrelated-histories解决

// pull时git pull origin 
--allow-unrelated-histories// merge时git merge
--allow-unrelated-histories复制代码

4 创建干净历史的分支

git checkout --orphan 
复制代码

--orphan创建出来的分支没有任何提交历史

5 git clone深度

// 克隆仓库,且只克隆最近 1 次提交历史,如果想克隆最近 n 次的历史,把 1 改成 n 即可。git clone --depth=1 
复制代码

转载于:https://juejin.im/post/5ccabb83f265da039257f156

你可能感兴趣的文章
Spring源码分析(四)SpringMVC初始化
查看>>
日记(react modal)
查看>>
Mac 安装 GO语言开发环境
查看>>
Node.js EventEmitter解读
查看>>
iOS开发: CocoaPods远程私有仓库的维护升级
查看>>
构建dubbo分布式平台-window安装zookeeper注册中心
查看>>
Qtum量子链周报(11月26日-12月2日)
查看>>
Qtum区块链指南
查看>>
CEO被曝盗窃事件背后,来电科技还能回到发展正轨吗?
查看>>
iOS的Cookie存取看我绝对够!!
查看>>
《架构师之路》(58沈剑) 读书笔记
查看>>
史上最烂的开发项目长啥样:苦撑12年,600多万行代码...
查看>>
Java枚举(三)
查看>>
数据库调研:memcached
查看>>
综合扫描及安全评估
查看>>
Web 性能优化: 图片优化让网站大小减少 62%
查看>>
Jenkins+Spring Boot构建部署
查看>>
磊哥测评之数据库SaaS篇:腾讯云控制台、DMC和小程序
查看>>
七个你没用过的炫酷开发工具推荐
查看>>
MySQL 千万级数据表 partition 实战应用
查看>>