闯过这 54 关,点亮你的 Git 技能树 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
git
Pro Git
Atlassian Git Tutorial
Pro Git 简体中文翻译
GitX
seabornlee
V2EX    git

闯过这 54 关,点亮你的 Git 技能树

  seabornlee 2015-12-30 19:26:00 +08:00 13461 次点击
这是一个创建于 3577 天前的主题,其中的信息可能已经有所发展或是发生改变。

开篇

如今, Git 大行其道,颇有一统天下之势。
如果你的技能树上 Git 和 Github 的图标还没有点亮的话,你都不好意思说你是程序员。
别说互联网企业,我接触到的许多传统企业都在从 SVN , Clear Case 等迁移到 Git 上,甚至大厂还会有一个团队去定制适合自己企业的 Git 服务器。

很多人简历上写的「精通 Git 与 Github 」,但如果你问他熟悉到什么程度的话,回答通常是「就是会用常用的 addcommitpush 操作」。

但工作中我们会遇到一些更加复杂的场景:

  • 忽略某些文件
  • 创建,删除分支
  • 找到最后修改某行代码的人
  • commit 后发现里边包含一个不应该提交的文件
  • commit 后发现少提交了一些文件
  • 一个文件中的多次有改动,怎么做到只提交其中的一部分?
  • 怎样整理提交记录使其更加整洁?
  • 快速定位是哪一次提交引入了 bug
  • ...

作为一线程序员,我们要如何快速学习 Git 以发挥其最大威力呢?

今天我就要向大家介绍一个工具,准确说应该是「游戏」,名字叫「 githug 」,它把平常可能遇到的一些场景都实例化,变成一个一个的关卡,一共有 55 个关卡:

#1: init #2: config #3: add #4: commit #5: clone #6: clone_to_folder #7: ignore #8: include #9: status #10: number_of_files_committed #11: rm #12: rm_cached #13: stash #14: rename #15: restructure #16: log #17: tag #18: push_tags #19: commit_amend #20: commit_in_future #21: reset #22: reset_soft #23: checkout_file #24: remote #25: remote_url #26: pull #27: remote_add #28: push #29: diff #30: blame #31: branch #32: checkout #33: checkout_tag #34: checkout_tag_over_branch #35: branch_at #36: delete_branch #37: push_branch #38: merge #39: fetch #40: rebase #41: repack #42: cherry-pick #43: grep #44: rename_commit #45: squash #46: merge_squash #47: reorder #48: bisect #49: stage_lines #50: find_old_branch #51: revert #52: restore #53: conflict #54: submodule #55: contribute 

安装

首先我们需要来安装这个游戏,githug 是用 Ruby 编写的,可通过如下命令安装:
gem install githug

如果遇到权限问题,请加上sudo
sudo gem install githug

安装成功后,在 Terminal 里进入你常用的目录,输入githug,会提示游戏目录不存在,是否要创建一个,输入y然后回车:

根据提示cd git_hug 进入游戏目录,准备开始游戏。

基本命令

在开始前我们还需要了解游戏的一些基本操作:

  • play - 默认命令,检查是否过关
  • hint - 显示过关提示
  • reset - 重启本关,或者重启到指定的某关
  • levels - 显示关卡列表

来试一下,githug reset

示例

我以第一关为例子给大家演示一下玩法。

第一关的名称是:init,提示是:「一个新目录 git_hug 被创建了,请把它初始化为一个空仓库」。
假设现在我不知道该怎么过关,我可以查看过关提示:

指示是:「你可以输入 git 命令来查看 git 命令列表」。

看最后一行,原来用 git init 就可以初始化一个空仓库,接着输入 githug 进行过关检测:

太棒了!顺利进入第二关!

怎么样?明白了吗?后面的 54 关就靠你自己了哦!

友情提示

在闯关过程中,尽量使用 githug hintgit help subcommand 获取帮助,也可以根据下面的两个教程来系统学习。
猴子都能懂的 git 入门
廖雪峰的 git 教程

为保大家都能顺利通关,学到所有的知识点,接下来我会写过关攻略,详细介绍每一关的玩法。
并且我不会直接给答案,而是演示整个过关的过程。

祝你好运!我们明天见。

56 条回复    2016-05-16 15:20:56 +08:00
LMkillme
    1
LMkillme  
   2015-12-30 19:27:51 +08:00
加入收藏,感谢!
martinmo
    2
martinmo  
   2015-12-30 19:48:49 +08:00 via iPhone
不错,支持一下
XianZaiZhuCe
    3
XianZaiZhuCe  
   2015-12-30 19:55:47 +08:00
已收藏
shiny
    4
shiny  
   2015-12-30 20:00:42 +08:00   2
大家千万别加入了收藏然后就再也不看了
sevenphp
    5
sevenphp  
   2015-12-30 20:00:55 +08:00
学习一下
warDoggie
    6
warDoggie  
   2015-12-30 20:06:12 +08:00 via iPhone
收藏 收藏
stillwaiting
    7
stillwaiting  
   2015-12-30 21:14:08 +08:00
感谢~
Caratpine
    8
Caratpine  
   2015-12-30 21:48:56 +08:00
支持,谢谢
zhpech
    9
zhpech  
   2015-12-30 21:51:51 +08:00
闯关中……
hyq
    10
hyq  
   2015-12-30 22:15:42 +08:00
刚通关,感觉 53 关的描述不太好懂,看了判断的源码才知道要我做什么
unsuey
    11
unsuey  
   2015-12-30 22:17:04 +08:00
Thanks
tanywei
    12
tanywei  
   2015-12-30 22:55:57 +08:00
收藏了地址 谢谢。
xrlin
    13
xrlin  
   2015-12-30 23:07:13 +08:00
支持,很不错的东西。
quietin
    14
quietin  
   2015-12-30 23:19:53 +08:00
前排支持
a4e9y47
    15
a4e9y47  
   2015-12-30 23:31:16 +08:00
哈哈哈好厉害的东西 支持~
acoldfox
    16
acoldfox  
   2015-12-30 23:34:10 +08:00 via iPhone
不错哇,很有想法
airqj
    17
airqj  
   2015-12-30 23:40:36 +08:00 via Android
好东西
aprikyblue
    18
aprikyblue  
   2015-12-31 00:16:22 +08:00
收藏
shenxian
    19
shenxian  
   2015-12-31 00:19:12 +08:00
大家千万别加入了收藏然后就再也不看了 +1
fhefh
    20
fhefh  
   2015-12-31 00:26:08 +08:00
mark~~
timothyye
    21
timothyye  
   2015-12-31 00:26:59 +08:00 via Android
Awesome!
seabornlee
    22
seabornlee  
OP
   2015-12-31 00:55:09 +08:00
@hyq 赞!
Phariel
    23
Phariel  
   2015-12-31 00:57:45 +08:00 via iPhone
一颗赛艇!明天上班最后一天没什么事了玩玩!
imlonghao
    24
imlonghao  
   2015-12-31 01:00:05 +08:00
通关了,除了 55
shajiquan
    25
shajiquan  
   2015-12-31 03:35:27 +08:00
@hyq 同感。
Andiry
    26
Andiry  
   2015-12-31 07:48:55 +08:00
通关了,可惜我最常用的几个命令: format-patch, apply, am 没有用到
theblackswan
    27
theblackswan  
   2015-12-31 09:33:30 +08:00
点赞收藏
Ericwei1990
    28
Ericwei1990  
   2015-12-31 09:48:46 +08:00
赞一个,太棒了,是时候增加 git 的技能树
ichou
    29
ichou  
   2015-12-31 10:15:31 +08:00
给组里的小伙伴刷一下
PS: 拿去做面试题会怎么样?
harry890829
    30
harry890829  
   2015-12-31 10:18:11 +08:00
这个真是不错,最近正好在看 Pro git ,练习一下
greatcl
    31
greatcl  
   2015-12-31 13:07:15 +08:00 via Android
收藏学习
JerningChan
    32
JerningChan  
   2015-12-31 14:02:34 +08:00
这个很不错哦!!
虽然我不是程序员,但是,有空玩玩各种语言 / 工具的小游戏很不错呀!!
SourceMan
    33
SourceMan  
   2015-12-31 14:03:36 +08:00
已加入 awesome-git 豪华午餐中
lynnworld
    34
lynnworld  
   2015-12-31 14:22:23 +08:00
已完成~
zhangchioulin
    35
zhangchioulin  
   2015-12-31 14:40:42 +08:00
回家试试
chaoxn
    36
chaoxn  
   2015-12-31 14:44:07 +08:00
非常不错,已经开撸,每一关都是一个新的 repo
ishamo
    37
ishamo  
   2015-12-31 15:30:32 +08:00
20 关不会,不懂神马意思,求支招。
maxam0128
    38
maxam0128  
   2015-12-31 15:33:33 +08:00
不错
inmyfree
    39
inmyfree  
   2015-12-31 15:38:45 +08:00
mark
home3k
    40
home3k  
   2015-12-31 15:46:54 +08:00
mark. 晚上试下.
jzk
    41
jzk  
   2015-12-31 15:47:31 +08:00
做完了。。 的确是看每个人的。。。常用的命令都木有 cover 到
stupil
    42
stupil  
   2015-12-31 15:52:45 +08:00
不错
slixurd
    43
slixurd  
   2015-12-31 15:53:52 +08:00
已做完。把本机时间修改 COMMIT 后再改回来的那关好坑....
Twinkle
    44
Twinkle  
   2015-12-31 15:57:20 +08:00
不会的时候 zsh 帮我补全了好多 >.>
ipeony
    45
ipeony  
   2015-12-31 16:32:45 +08:00
学习 git 的正确姿势,感谢
zhpech
    46
zhpech  
   2015-12-31 16:42:06 +08:00
@ishamo 需要给提交设定未来的某一个时间 git commit 中有个--date
chaoxn
    47
chaoxn  
   2015-12-31 16:43:49 +08:00
@ishamo 加个未来的日期
git commit --date=2016.01.01 -m"add future date"
popo233
    48
popo233  
   2015-12-31 17:09:43 +08:00
通关了,学到了几个新姿势..
lazyyz
    49
lazyyz  
   2015-12-31 17:12:17 +08:00
收藏+ 1
loodeer
    50
loodeer  
   2016-01-04 14:33:48 +08:00
感谢分享,好东西
sniperhgy
    51
sniperhgy  
   2016-01-14 15:02:59 +08:00
@seabornlee 楼主你好,我使用 Windows 7 ,安装了 Ruby 2.2.0 Windows 版本,请问怎样进行 githug 的安装?捣鼓了半天也没有弄出来,进入 githug 的目录下面输入 gem install githug ,出现提示:
D:\VMware-ShareFolder\Study\githug>gem install githug
ERROR: Could not find a valid gem 'githug' (>= 0), here is why:
Unable to download data from https://rubygems.org/ - Errno::ECONNREFUS
ED: No connection could be made because the target machine actively refused it.
- connect(2) for "api.rubygems.org" port 443 ( https://api.rubygems.org/specs.4.8
.gz)
seabornlee
    52
seabornlee  
OP
   2016-01-15 00:28:24 +08:00
@sniperhgy 用淘宝源试试: https://ruby.taobao.org/
sniperhgy
    53
sniperhgy  
   2016-01-15 09:44:18 +08:00
@seabornlee 感谢回复^_^。但是我已经从 Github 上面下载了 Githug 的完整代码包,为何还需要从网上下载一些资源呢?
seabornlee
    54
seabornlee  
OP
   2016-01-15 14:47:12 +08:00
@sniperhgy 因为它有一些依赖,不在源码里的。
sniperhgy
    55
sniperhgy  
   2016-01-15 15:56:07 +08:00
@seabornlee 原来如此,非常感谢。还有一点需要和楼主确认一下安装步骤:在 Windows 平台,安装了 Ruby ,然后下载 githug 并解压缩到任意英文目录下,然后在 cmd 中进入到 githug 的目录里面输入 gem install githug ?
hantsy
    56
hantsy  
   2016-05-16 15:20:56 +08:00   1
支持一下。

分支是 GIT 的一个最基本的特性,我所遇到的一些技术人员大都是把 GIT 当成 SVN 来用,很多连 Branch 都没用。连写 Comment 描述提交内容这种简单的事都是敷衍。更谈不上 Github Flow ( Fork , Branch , PR , Code Review ), CI , CD 了。
关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3879 人在线   最高记录 6679       Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 29ms UTC 00:08 PVG 08:08 LAX 17:08 JFK 20:08
Do have faith in what you're doing.
ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86