Githug将git的入门与游戏相结合,太有意思了。
游戏过程中少不了网上查找资料,man,难度4以后不停的hint。
通关后对git的了解又加深了许多。
取连接名时很是矛盾,写完博客后还是将链接中的walkthrough改为了cheat sheet。
希望大家不需要使用到这篇博客吧。
因关卡随时处于更新状态,可能会稍有不同
- 最后更新时间2012-11-14
- 最后更新时间2013-05-17
- 最后更新时间2016-02-25
准备
安装Githug:$ gem install githug
。
安装完成后直接执行$ githug
开始游戏,同一条命令进入下一关。
$ githug hint
查看过关提示,
当操作错误无法过关时,可以$ githug reset
重置当前关卡。
开始
0
1 初始化git项目
1
2
| $ cd git_hug
$ git init
|
2 配置git用户信息
1
2
| $ git config user.name xxx
$ git config user.email xxx@gmail.com
|
或者直接在.git/config
文件里添加
1
2
3
| [user]
name = xxx
email = xxx@gmail.com
|
回答时分别输入xxx
和xxx@gmail.com
- 扩展
使用--global
参数修改本机全局设置
1
| $ git config --global user.name = xxx
|
- 问题
命令行里不要带等号$ git config user.name = xxx
,
否则去文件里查时会发现等号变成值name = =
。
(之前好像可以用的?待解决)
3 stage一个文件
4 提交已stage的文件
5 检出一个已有项目
1
| $ git clone https://github.com/Gazler/cloneme
|
6 检出项目并重命名
1
| $ git clone https://github.com/Gazler/cloneme my_cloned_repo
|
7 配置忽略文件规则
使用!
可从忽略文件中排除。
在.gitignore
文件里添加
8 忽略文件中排除特定名称
在.gitignore
文件里添加
9 查看状态
$ git status
查看,
得到答案为database.yml
10 查看状态,分辨状态
$ git status
查看。分为:可以被commit的,修改后但未stage的,新文件从未被stage的。
得到答案为2
11 删除文件
$ git status
查看,发现被删文件名为deleteme.rb
12 将文件移出git但不删除文件
1
| $ git rm --cached deleteme.rb
|
13 保存项目当前状态但不提交(新,实用)
用于保存中间态,方便临时切换分支,用git stash list
可查看git stash apply
可取出(多个时后面可加stash@{2}
之类的名字)。
14 重命名文件
1
| $ git mv oldfile.txt newfile.txt
|
15 修改目录结构
1
2
| $ mkdir src
$ git mv *.html src/
|
16 查看提交历史
$ git log
查看提交历史记录,答案为commit后长字符串的前7位
17 tag
18 推送 tag
因为默认push
不会处理tag
19 将新修改并入上一次提交
1
2
| $ git add forgotten_file.rb
$ git commit --amend
|
写完注释后保存退出(vi是:qw
,应该都会吧)
20 修改提交时间
使用--date
参数将时间修改到指定时间
1
| $ git commit -m '-' --date 2099.01.01
|
21 unstage一个文件
1
| $ git reset HEAD to_commit_second.rb
|
22 取消上一次提交
1
| $ git reset --soft HEAD^
|
23 恢复文件修改
1
| $ git checkout config.rb
|
24 查看remote信息
$ tail .git/config
查看remote信息,
答案为my_remote_repo
(应该有其他方法,直接通过命令)
25 查看remote链接
同上,答案为https://github.com/githug/not_a_repo
(有其他方法)
26 pull
1
| $ git pull origin master
|
27 关联远程库(新项目必备)
1
| $ git remote add origin https://github.com/githug/githug
|
28 合并:rebase(与merge做对比)
1
2
| $ git rebase origin/master
$ git push
|
29 查看变动
通过$ git diff app.rb
查看文件改动,
显示行号为23,改动在下面第3行,所以答案为26
。
30 跟踪具体代码行作者
$ git blame config.rb
查看修改记录,发现密码出现在第五行。
在这行的左边可以看到提交者为Spider Man
(卖萌了)。
31 新建分支
32 新建并进入分支
1
| $ git checkout -b my_branch
|
33 按标签检出
34 仅按标签检出
当标签和分支名相同时,需要指定标签检出
1
| $ git checkout tags/v1.2
|
35 按版本编号检出至新分支
查看提交历史,找到第二条的id,输入时只需要输入前几位即可
1
| $ git branch test_branch -v 7cd3aa021
|
36 删除分支
1
| $ git branch -d delete_me
|
37 推送分支
1
| $ git push origin test_branch
|
38 合并分支
39 拉取分支
40 rebase分支
1
2
| $ git checkout feature
$ git rebase master
|
41 压缩空间
42 仅从分支合并指定提交
$ git branch
查看分支列表,得到分支名。
$ git log new-feature
查看分支提交记录。
最后合并:
1
| $ git cherry-pick ca32a6da
|
43 全项目搜索
其实 linux 下直接 grep 也可以
可以看到有4条,答案为4
。
44 修改历史提交日志
查看历史记录,发现错误在倒数第二次提交上
进入编辑页面,将需要改动的行(第一行)的pick
改为reword
(注意,只需要通过reword
来标记,不要修改拼写)。
保存退出后在弹出的第二个窗口里修改拼写错误commmit
改为commit
。
45 合并历史提交(清洁日志,实用)
查看历史记录发现最后3次都为同一个文件的修改,可以合并
将弹出编辑页的第2、3、4行的pick
改为squash
,
第二个弹出页直接保存退出即可。
46 从分支合并时仅保存为一次提交
1
2
| $ git merge --squash long-feature-branch
$ git commit'
|
47 更改历史提交顺序
查看历史记录发现最后两次提交顺序错误
然后在弹出编辑页的前两行顺序调换。
48 二叉树排错(很强大,侧面看出测试驱动重要性) *
$ git log --reverse -p prog.rb
查看最初一次为正确提交,版本号为f608824888
1
2
3
4
5
| $ git bisect start
$ git bisect good f608824888
$ git bisect bad
$ git bisect run make test
//$ git reset
|
日志里…… is the first bad commit
所以回答18ed2ac
49 仅stage一个文件的一部分 *
查看文件可知需要stage的是第二行(…the first feature)。
1
| $ git add -p feature.rb
|
出现提示如何处理,输入e
来编辑提交内容,
在弹出编辑页面删除第5行(…the first feature),
因为不在本次stage操作内,保存退出。
50 查看操作历史
查看到日志第2行...checkout: moving from solve_world_hunger to kill_the_batman...
1
| $ git checkout solve_world_hunger
|
51 回滚某次提交历史
查看历史记录,发现倒数第二次提交需要取消
直接保存并退出
52 通过操作日志,挽救git reset --hard HEAD^
的误操作
$ git reflog
查看日志,发现需要回覆至版本804db65
(每次版本号可能不同),或直接写HEAD@{1}
。
53 合并分支并处理冲突
编辑poem.txt
文件,处理冲突
1
2
| $ git add poem.txt
$ git ci -m 'merge mybranch`
|
54 子模块
1
| git submodule add https://github.com/jackmaney/githug-include-me
|
55
最后一关!!!
内容是什么,就留点悬念吧:)