githug
是一个练习git技巧的小游戏.
它需要ruby
和gem
来安装.
以下是我对其闯关的记录
安装好githug后,运行githug play
来进行第一关
Level-1
init: 进入git_hug 文件夹,运行git init
$cd git_hug
$git init
level-2
config: 设置git用户的 name
email
$git config --global user.name "mopel"
$git config --global user.email "amosbake@gmail.com"
level-3
add :添加新增文件"README"至待提交区
$git add "README"
level-4
commit: 提交文件"REDME"
$git commit -m'level-4'
level-5
clone: 将项目'cloneme' clone到本地
$git clone https://github.com/Gazler/cloneme
level-6
clone: 将项目'cloneme' clone到指定文件夹
$git clone https://github.com/Gazler/cloneme "my_clone_repo"
level-7
ignore: 添加忽略
solution: 新增.gitignore 文件 并添加规则 '*.swp'
level-8
include: 忽略后缀为.a的文件,但lib.a除外
编辑.gitignore如下
.a
!lib.a
level-9
status: 找出未加入提交区的文件
$git status
level-10
status: 查看提交区的信息 -v 查看新增文件,待提交文件等信息
$git status -v
level-11
rm:删除移除提交区的文件
$git status
$rm deleteme.rb
level-12
-cache: 从提交区移除文件 --cached 保留文件 -f 删除文件
$git rm --cached deleteme.rb
level-13
stash: 保存修改,但不保存到提交区
$git stash
level-14
rename: 为文件重命名
$git mv "oldfile.txt" "newfile.txt"
level-15
move: 将文件转移位置
$git mkdir src
$git mv "about.html" src
level-16
log: 查看提交记录
$git log
level-17,18
tag: 为提交打标签
$git tag
$git log -a newtag -m"new_tag"
leve-19
commit-amend 修改上次提交
$git commit --amend -m"amend"
level-20
commit-date 修改提交时间
$git commit -m"new date" --date 2016/2/1
level-21
reset: 修改提交
$git reset HEAD to_commit_second.rb
level-22
reset-soft: 取消上一次提交,并保留提交后的修改
$git reset --soft HEAD^
level-23
checkout-file: 将特定文件重置到上一次提交的状态
$git checkout config.rb
level-24
remote: 查看远程仓库
$git remote
level-25
remote-url:查看远程仓库链接
$git remote-v
level-26
pull:远程仓库拉取数据到本地分支
$git pull origin master
level-27
remote_add:添加远程仓库
$git remote add origin https://github.com/githug/githug
level-28
push:远程仓库有新提交,先rebase然后push你的提交
$git pull --rebase
$git push
level-29
diff:显示版本提交差异
$git diff app.rb
tip:显示@@ -23,7 +23.7 @@ 指下一行的行数
level-30
blame:逐行显示修改历史及提交者
$git blame config.rb
level-31
branch:新建分支
$git branch test_code
level-32
checkout_branch:切换到新建分支
$git checkout -b my_branch
level-33,34
checkout_tag:切换到已标记提交
$git checkout 'v1.2'
$git checkout tags/v1.2 //存在同名分支
level-35
branch_commit: 将已有提交切换到新建分支
$git branch test_branch 57bf12a4 //最后为提交的哈希值
level-36
delete_branch: 删除分支
$git branch -d delete_me
level-37
remote_push: 推送单一分支到远端
$git push origin test_branch
level-38
merge: 合并其他分支
$git merge feature
level-39
fetch: 查看远程仓库情况
$git fetch
level-40
rebase: 合并分叉分支,使分叉历史消失
$git checkout feature
$git merge master
level-41
repack: 打包仓库 -d:移除多余的包
$git repack -d
level-42
cherry-pick: 添加某个或多个commit到现有分支中
场景:增加新功能,但不沿用新功能分支中的其他提交
$git cherry-pick ca32a6da //sha-1值
level-43
grep: 查找库中某段文字
场景:查看有多少TODO
$git grep TODO -n//附加行数
level-44
rename_commit: 修改以往提交commit的信息
$git log //查找目标commit的sha-1值
$git rebase -i 4e9934f //进入rebase的修改vim界面
//将目标commit之前的'pick' 改为 'reword'
//进入修改提交信息vim,进行修改
level-45
combie_commit: 合并提交
$git log //查看需要合并的提交
$git rebase -i HEAD~3 //rebase 到合并提交之前
//在修改vim界面 将需要合并的提交之前的'pick'改为'squash'或's'
//写入新的提交信息
level-46
squash_merge: 合并merge
$git merge long-feature-branch --squash
//提示需要进行提交来继续
$git commit -m'all'
level-47
reorder: 修改提交顺序
$git log //查看需要合并的提交
$git rebase -i HEAD~3 //rebase 到修改提交之前
//在修改vim界面,调整commit顺序
level-48
bisect: 查找错误提交
场景: 发现在提交中有一个错误提交,用测试方法'run test' 来找出错误提交
$git log //查看提交历史
$git bisect start//开始查找
$ git bisect bad 7c0dcfa //标记坏节点
$ git bisect good master 34567ab//标记好节点
//git 自动帮我们找出中间节点
$git bisect run make test //自动运行测试命令
//git提示说找到错误节点
level-49
stage: 应用部分分支上的修改
场景: 某个文件在当前分支和另一个分支上都被修改了,使其应用当前分支的修改
$git status //查看提交库
$git add -p //进入add 命令界面
//选择e(dit) 修改文件
level-50
reflog: 查看操作记录
场景: 某个提交找不到了或被错误删除了
$git reflog
level-51
revert: 撤销提交
场景: 某个提交出错,但不能修改提交记录 (不能用reset)
$git revert HEAD~1 //不破坏原有commit记录,新增了一个commit
level-52
restore:恢复被`reset --HARD'的现场
$git reflog //查看操作记录
$git checkout e456754//签出到未破坏的现场
level-53
conflict:解决合并冲突
$git merge mybranch
$vim poem.txt
$git commit -a -m'merge'
level-54
submodule:添加git仓库的子模块
场景:需要对依赖库进行修改和版本控制,且易于统一控制
$git submodule add https://github.com/include_me
额外情况: 下载别人包括submodule的库
$git clone https://github.com/foo
$cd foo
$git submodule init
$git submodule update //更新依赖库