3.git高级篇总结
高级 1:不喜欢merge的分叉,用rebase吧
介绍的是 rebase 指令,它可以改变 commit 序列的基础点。它的使用方式很简单:
git rebase 目标基础点
需要说明的是,rebase 是站在需要被 rebase 的 commit 上进行操作,这点和 merge 是不同的。
高级 2:刚刚提交的代码,发现写错了怎么办?
用 commit --amend 可以修复当前提交的错误。使用方式:
git commit --amend
需要注意的有一点:commit --amend 并不是直接修改原 commit 的内容,而是生成一条新的 commit。(但原commit时间不变)
高级 3:写错的不是最新的提交,而是倒数第二个?
介绍了交互式 rebase,它可以在 rebase 开始之前指定一些额外操作。交互式 rebase 最常用的场景是修改写错的 commit,但也可以用作其他用途。它的大致用法:
- 使用方式是
git rebase -i 目标commit; - 在编辑界面中指定需要操作的
commits 以及操作类型;- 目标是修改倒数第二个 commit,也就是上面的那个「增加常见笑声集合」,所以你需要把它的操作指令从 pick 改成 edit 。 edit 的意思是「应用这个 commit,然后停下来等待继续修正」
- 操作完成之后用
git rebase --continue来继续rebase过程。
高级 4:比错还错,想直接丢弃刚写的提交?
撤销最新的提交,方式是通过 reset --hard:
git reset --hard 目标commit
高级 5:想丢弃的也不是最新的提交?
这节的内容是「撤销过往的提交」。方法有两种:
- 用
git rebase -i在编辑界面中 直接删除 想撤销的commits - 用
git rebase --onto在 rebase 命令中直接剔除想撤销的commits
方法有两种,理念是一样的:在 rebase 的过程中去掉想撤销的 commit,让他它消失在历史中。
高级 6代码已经 push 上去了才发现写错?
当错误的 commit 已经被 push 上去时的解决方案。具体的方案有两类:
- 如果出错内容在私有
branch:在本地把内容修正后,强制push(git push origin branch1 -f)一次就可以解决; - 如果出错内容在
master:不要强制push,而要用revert把写错的commit撤销。
高级 7:reset 的本质——不止可以撤销提交
reset 指令的本质:重置 HEAD 以及它所指向的 branch 的位置。同时,介绍了 reset 的三种参数:
--hard:重置位置的同时,清空工作目录的所有改动(git reset --hard HEAD^);--soft:重置位置的同时,保留工作目录和暂存区的内容,并把重置HEAD的位置所导致的新的文件差异放进暂存区。--mixed(默认):重置位置的同时,保留工作目录的内容,并清空暂存区。
除了上面这三种参数,还有一些没有列出的较为不常用的参数;另外除了我讲的功能外,reset 其实也还有一些别的功能和用法。不过 reset 最关键的功能、用法和本质原理就是上面这些了,想了解更多的话,可以去官网了解一下。
高级 8:checkout 的本质
checkout 的本质:签出(checkout)指定的 commit。所以你不止可以切换 branch,也可以直接指定 commit 作为参数,来把 HEAD 移动到指定的 commit。
checkout 和 reset 的不同
checkout 和 reset 都可以切换 HEAD 的位置,它们除了有许多细节的差异外,最大的区别在于:reset 在移动 HEAD 时会带着它所指向的 branch 一起移动,而 checkout 不会。当你用 checkout 指向其他地方的时候,HEAD 和 它所指向的 branch 就自动脱离了。
事实上,checkout 有一个专门用来只让 HEAD 和 branch 脱离而不移动 HEAD 的用法:
git checkout --detach
执行这行代码,Git 就会把 HEAD 和 branch 脱离,直接指向当前 commit:
不常用。举个例子,比如你想在某个 commit 出写一些临时的新的 commits,但不确定是否保留这些内容(或者倾向于不保留),那么你就:1. 不希望把当前的 branch 带跑;2. 不想新建一个别的 branch。那么你就 detach 一下,这样就可以在后面的 commits 中只有 HEAD 在跟着 commits 跑,而 branch 一直留在原地。
高级 9:紧急情况:「立即给我打个包,现在马上!」
stash 指令可以帮你把工作目录的内容全部放在你本地的一个独立的地方,它不会被提交,也不会被删除,你把东西放起来之后就可以去做你的临时工作了,做完以后再来取走,就可以继续之前手头的事了。
git stash工作目录暂时清理干净git stash pop切回分支
注意:没有被 track 的文件,即从没被 add 过的文件不会被 stash 起来,因为 Git 会忽略它们。如果想把这些文件也一起 stash,可以加上
-u参数,它是--include-untracked的简写
git stash -u
高级 10:branch 删过了才想起来有用?
- reflog :引用的 log
reflog 是 "reference log" 的缩写,使用它可以查看 Git 仓库中的引用的移动记录。
假如你误删了 branch1 这个 branch,那么你可以查看一下 HEAD 的移动历史:
git reflog
切换回 删除前的分支sha1,然后重新创建 branch1 :
git checkout c08de9a
git checkout -b branch1
- 查看其他引用的 reflog
reflog 默认查看 HEAD 的移动历史,除此之外,也可以手动加上名称来查看其他引用的移动历史,例如某个 branch:
git reflog branch1
3.git高级篇总结的更多相关文章
- Git - 高级合并
Git - 高级合并https://git-scm.com/book/zh/v2/Git-%E5%B7%A5%E5%85%B7-%E9%AB%98%E7%BA%A7%E5%90%88%E5%B9%B6 ...
- Devops 开发运维高级篇之微服务代码上传和代码检查
Devops 开发运维高级篇之微服务代码上传和代码检查 微服务持续集成(1)-项目代码上传到Gitlab 微服务持续集成(2)-从Gitlab拉取项目源码 微服务持续集成(3)-提交到SonarQub ...
- Devops 开发运维高级篇之Jenkins+Docker+SpringCloud微服务持续集成——部署方案优化
Devops 开发运维高级篇之Jenkins+Docker+SpringCloud微服务持续集成--部署方案优化 之前我们做的方案部署都是只能选择一个微服务部署并只有一台生产服务器,每个微服务只有一个 ...
- C#高级知识点&(ABP框架理论学习高级篇)——白金版
前言摘要 很早以前就有要写ABP高级系列教程的计划了,但是迟迟到现在这个高级理论系列才和大家见面.其实这篇博客很早就着手写了,只是楼主一直写写停停.看看下图,就知道这篇博客的生产日期了,谁知它的出厂日 ...
- 【.net深呼吸】动态类型(高级篇)
前面老周给大家介绍了动态类型使用的娱乐级别用法,其实,在很多情景下,娱乐级别的用法已经满足需求了. 如果,你想自己来控制动态类型的行为和数据的存取,那么,就可以考虑用今天所说的高大上技术了.比如,你希 ...
- 【转载】Spark性能优化指南——高级篇
前言 数据倾斜调优 调优概述 数据倾斜发生时的现象 数据倾斜发生的原理 如何定位导致数据倾斜的代码 查看导致数据倾斜的key的数据分布情况 数据倾斜的解决方案 解决方案一:使用Hive ETL预处理数 ...
- ORM查询语言(OQL)简介--高级篇(续):庐山真貌
相关文章内容索引: ORM查询语言(OQL)简介--概念篇 ORM查询语言(OQL)简介--实例篇 ORM查询语言(OQL)简介--高级篇:脱胎换骨 ORM查询语言(OQL)简介--高级篇(续):庐山 ...
- ORM查询语言(OQL)简介--高级篇:脱胎换骨
相关文章内容索引: ORM查询语言(OQL)简介--概念篇 ORM查询语言(OQL)简介--实例篇 ORM查询语言(OQL)简介--高级篇:脱胎换骨 ORM查询语言(OQL)简介--高级篇(续):庐山 ...
- Git / 程序员需要知道的12个Git高级命令
众所周知,Git目前已经是分布式版本控制领域的翘楚,围绕着Git形成了完整的生态圈.学习Git,首先当然是学习Git的基本工作流.相比于SVN等传统版本控制系统来说,Git是专为分布式版本控制而生的强 ...
随机推荐
- Linux下一款可以使用命令行的pdf阅读器
Zathura是linux下一款用命令行控制打pdf阅读器,并且基本打使用方法和vim很相似.对于喜欢键盘操作的用户来说的确是一个不错的选择. ubuntu下的安装命令: sudo apt-get i ...
- 【Spark】Stage生成和Stage源代码浅析
引入 上一篇文章<DAGScheduler源代码浅析>中,介绍了handleJobSubmitted函数,它作为生成finalStage的重要函数存在.这一篇文章中,我将就DAGSched ...
- bzoj1407
扩展欧几里得 我们发现其实就是两个野人在自己的寿命内不会相遇,或者永远不会相遇,那么我们枚举m,然后枚举两个人,看是否符合条件 扩展欧几里得ax+by=c,这里c不能取模,a能取模,具体不想了 #in ...
- vs2010 下使用C#开发activeX控件
1.创建一个类库 2.项目属性-应用程序-程序集信息-"使程序集COM可见"勾上; 3.项目属性-生成-"为COM互操作注册"勾上.(这个折腾一天,否则注册事件 ...
- js判断ie6的代码
var isIE=!!window.ActiveXObject; var isIE6=isIE&&!window.XMLHttpRequest; var isIE8=isIE& ...
- 微信小程序之上传多张图片
之前写过一篇小程序商品发布的博客,里面有上传多张图片的功能,这里单独拿出来实现以下,小程序的upLoadFile一次只能上传一张图片,需要循环调这个接口来实现 for (var i = 0; i &l ...
- HTML-ul分分钟理解
在HTML中,列表有三种,如图分别是有序.无序和自定义列表.上面是我在网络上找到的一张图片很明了就看以看出来,今天要分享的就是其中的无序列表Ul(unordered list),给大家整理了一下我所知 ...
- sql数据库中常用连接
很简单的知识点,今天有点搞不清楚左外连接,右外连接:详见以下: --表stu id name 1, Jack 2, Tom 3, Kity 4, nono --表exam id grade 1, 56 ...
- 在Windows2003安装配置Bitvise SSH Server后,不能使用软件内建立的用户登录!
Google: I can only log in with an administrator account - attempting to log in with a regular accou ...
- windows下关闭进程树
关闭进程需要特定权限,如果你程序权限不够也会导致关闭进程失败.关闭进程树,需要遍历给定进程下的所有子进程,这个过程可以用并查集来做. 1.编写获取进程父进程的代码 #define ProcessBas ...