3.git高级篇总结

阅读 Git 原理详解及实用指南 记录

高级 1:不喜欢merge的分叉,用rebase吧

介绍的是 rebase 指令,它可以改变 commit 序列的基础点。它的使用方式很简单:

git rebase 目标基础点

需要说明的是,rebase 是站在需要被 rebasecommit 上进行操作,这点和 merge 是不同的。

高级 2:刚刚提交的代码,发现写错了怎么办?

commit --amend 可以修复当前提交的错误。使用方式:

git commit --amend

需要注意的有一点:commit --amend 并不是直接修改原 commit 的内容,而是生成一条新的 commit。(但原commit时间不变)

高级 3:写错的不是最新的提交,而是倒数第二个?

介绍了交互式 rebase,它可以在 rebase 开始之前指定一些额外操作。交互式 rebase 最常用的场景是修改写错的 commit,但也可以用作其他用途。它的大致用法:

  1. 使用方式是 git rebase -i 目标commit
  2. 在编辑界面中指定需要操作的 commits 以及操作类型;
    • 目标是修改倒数第二个 commit,也就是上面的那个「增加常见笑声集合」,所以你需要把它的操作指令从 pick 改成 edit 。 edit 的意思是「应用这个 commit,然后停下来等待继续修正」
  3. 操作完成之后用 git rebase --continue 来继续 rebase 过程。

高级 4:比错还错,想直接丢弃刚写的提交?

撤销最新的提交,方式是通过 reset --hard:

git reset --hard 目标commit

高级 5:想丢弃的也不是最新的提交?

这节的内容是「撤销过往的提交」。方法有两种:

  1. git rebase -i 在编辑界面中 直接删除 想撤销的 commits
  2. git rebase --onto 在 rebase 命令中直接剔除想撤销的 commits

方法有两种,理念是一样的:在 rebase 的过程中去掉想撤销的 commit,让他它消失在历史中。

高级 6代码已经 push 上去了才发现写错?

当错误的 commit 已经被 push 上去时的解决方案。具体的方案有两类:

  1. 如果出错内容在私有 branch:在本地把内容修正后,强制 push (git push origin branch1 -f)一次就可以解决;
  2. 如果出错内容在 master:不要强制 push,而要用 revert 把写错的 commit 撤销。

高级 7:reset 的本质——不止可以撤销提交

reset 指令的本质:重置 HEAD 以及它所指向的 branch 的位置。同时,介绍了 reset 的三种参数:

  1. --hard:重置位置的同时,清空工作目录的所有改动(git reset --hard HEAD^);
  2. --soft:重置位置的同时,保留工作目录和暂存区的内容,并把重置 HEAD 的位置所导致的新的文件差异放进暂存区。
  3. --mixed(默认):重置位置的同时,保留工作目录的内容,并清空暂存区。

除了上面这三种参数,还有一些没有列出的较为不常用的参数;另外除了我讲的功能外,reset 其实也还有一些别的功能和用法。不过 reset 最关键的功能、用法和本质原理就是上面这些了,想了解更多的话,可以去官网了解一下。

高级 8:checkout 的本质

checkout 的本质:签出(checkout)指定的 commit。所以你不止可以切换 branch,也可以直接指定 commit 作为参数,来把 HEAD 移动到指定的 commit

checkout 和 reset 的不同

checkoutreset 都可以切换 HEAD 的位置,它们除了有许多细节的差异外,最大的区别在于:reset 在移动 HEAD 时会带着它所指向的 branch 一起移动,而 checkout 不会。当你用 checkout 指向其他地方的时候,HEAD 和 它所指向的 branch 就自动脱离了。

事实上,checkout 有一个专门用来只让 HEAD 和 branch 脱离而不移动 HEAD 的用法:

git checkout --detach

执行这行代码,Git 就会把 HEAD 和 branch 脱离,直接指向当前 commit:

image

不常用。举个例子,比如你想在某个 commit 出写一些临时的新的 commits,但不确定是否保留这些内容(或者倾向于不保留),那么你就:1. 不希望把当前的 branch 带跑;2. 不想新建一个别的 branch。那么你就 detach 一下,这样就可以在后面的 commits 中只有 HEAD 在跟着 commits 跑,而 branch 一直留在原地。

高级 9:紧急情况:「立即给我打个包,现在马上!」

stash 指令可以帮你把工作目录的内容全部放在你本地的一个独立的地方,它不会被提交,也不会被删除,你把东西放起来之后就可以去做你的临时工作了,做完以后再来取走,就可以继续之前手头的事了。

  1. git stash 工作目录暂时清理干净
  2. git stash pop 切回分支

注意:没有被 track 的文件,即从没被 add 过的文件不会被 stash 起来,因为 Git 会忽略它们。如果想把这些文件也一起 stash,可以加上 -u 参数,它是 --include-untracked 的简写

git stash -u

高级 10:branch 删过了才想起来有用?

  1. reflog :引用的 log

reflog 是 "reference log" 的缩写,使用它可以查看 Git 仓库中的引用的移动记录。

假如你误删了 branch1 这个 branch,那么你可以查看一下 HEAD 的移动历史:

git reflog

切换回 删除前的分支sha1,然后重新创建 branch1

git checkout c08de9a

git checkout -b branch1

  1. 查看其他引用的 reflog

reflog 默认查看 HEAD 的移动历史,除此之外,也可以手动加上名称来查看其他引用的移动历史,例如某个 branch

git reflog branch1

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,723评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,003评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,512评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,825评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,874评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,841评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,812评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,582评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,033评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,309评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,450评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,158评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,789评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,409评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,609评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,440评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,357评论 2 352

推荐阅读更多精彩内容

  • git常用命令 GIT常用命令备忘:http://stormzhang.com/git/2014/01/27/gi...
    新篇章阅读 8,469评论 1 26
  • 人最怕的是什么,身体上的不健康,人格上的不健全或者说,生活里的不入戏,都说人生如戏全靠演技,在这场看似自编自导自演...
    独孤蓝简羊阅读 181评论 0 0
  • 陈温听完赵菲说的,轻轻喘了一口气,忽然想通,赵菲那天没有讲出实情,可能真被吓到了,可能因为自己当时讲,记过会被取消...
    李方知阅读 447评论 1 3
  • 这次把陈年旧照都翻出来了。所以相机型号都挺老的,图1,3用的佳能550D,图2用的初代5D。当然以上都是经过后期处...
    斯塔胡阅读 122评论 0 0
  • 近日拜读冯友兰先生之《中国哲学简史》,先生河南人,巧合的是,老子、庄子、墨子、韩非子、二程皆是河南人,今日河...
    伫望河清阅读 547评论 0 1