Skip to main content

Githug 通关攻略

前言

Githug 是一款开源的学习 git command 的游戏,最近抽空过了一遍。

攻略

Level 1 init

初始化

git init

Level 2 config

设置邮箱和用户名,global 参数是全局配置

git config --global user.name yourusername
git config --global user.email youremail

Level 3 add

使用 git add 把 README 添加到暂存区

git add README

Level 4 commit

使用 git commit 把暂存区中的 README 提交到本地版本库

git commit -m "commit message"
or
git commit README

Level 5 clone

使用 git clone 把远程仓库克隆到本地

git clone https://github.com/Gazler/cloneme

Level 6 clone_to_folder

使用 git clone 把远程仓库克隆到本地指定目录

git clone https://github.com/Gazler/cloneme my_cloned_repo

Level 7 ignore

vim .gitignore

添加 *.swp 到 .gitignore

.gitignore
*.swp

Level 8 include

vim .gitignore

本关的要求是忽略所有 .a 后缀的文件, 但是 lib.a 除外,! 的意思是不包括

*.a
!lib.a

Level 9 status

git status 是日常使用最多的命令了

git status

Level 10 number_of_files_committed

使用 git status 查看要被 commit 的文件数量

git status
or
git show --stat

Level 11 rm

从版本控制中把文件删除

git rm deleteme.rb

Level 12 rm_cached

简单版 git reset,把不小心添加到暂存区的文件的记录删除,但不删除文件

git rm --cached deleteme.rb

Level 13 stash

将当前工作区做的修改保存到 git 维护的栈里面

git stash

Level 14 rename

git mv 修改文件的名称

git rename oldfile.txt newfile.txtE

Level 15 restructure

创建 src 文件夹,并把 *.html 文件移动到 src 文件夹里面

mkdir src
git mv *.html src

Level 16 log

使用 git log 查看 commit 的 hash 值

使用 git log 查看最近一次 commit 的 hash 值

Level 17 tag

tag 和分支类似,但其实是指向某 commit 的指针(或者说别名),然后就可以快速访问了

git tag new_tag

Level 18 push_tags

把带 tag 的 commit 提交到远程仓库

git push --tags

Level 19 commit_amend

将遗忘添加到暂存区的文件添加到本次 commit,必须在本次 commit 被 push 到远程仓库之前

git commit --amend

Level 20 commit_in_future

为 commit 设定未来时间,支持多种时间格式

git commit --date="Sep 6 21:08:08 2021 +0800" -m "commit with data"

Level 21 reset

将文件回退到 commit 之前,并且不保留索引(修改)

git reset to_commit_second.rb

Level 22 reset_soft

将文件回退到 commit 之前,并且保留索引(修改)

git log
git reset --soft bf1c8ee7c8613638654df9bc1d53d99ffb94ad4f
or
git reset --soft HEAD@{1}

Level 23 checkout_file

取消被 add 到暂存区的文件的修改,回到 add 之前

### 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

添加仓库名为 origin 的链接

git remote add origin https://github.com/githug/githug

Level 28

使用 git rebase 与远程的 master 分支做合并,然后把更改推送到远端

git rebase
git push

Level 29 diff

查看文件详细变更

git diff app.rb

Level 30 blame

查看每一行代码最近修改的作者

git add README

Level 31 branch

新建一个分支

git checkout test_code

Level 32 checkout

新建一个分支并切换到新创建分支

git checkout -b my_branch

Level 33 checkout_tag

根据 tag 切换分支

git checkout tag_name

Level 34 checkout_tag_over_branch

有同名分支和 tag 冲突,所以需要使用 tags/tag_name

git checkout tags/tag_name

Level 35 branch_at

在指定 commit 创建分支

git checkout -b test_branch
git resrt head^
or
git log
git checkout -b test_branch <commit hash>
or
git branch test_branch HEAD~1

Level 36 delete_branch

删除指定分支

git branch -d branch_name

Level 37 push_branch

只推送指定分支到远端

git checkout branch_name
git push --set-upstream origin branche_name

Level 38 merge

合并指定分支到当前分支

git merge branche_name

Level 39 fetch

拉取远程仓库的最新提交,不做本地合并

git fetch

Level 40 rebase

将 feature 分支通过 rebase master 达到历史记录为一条平滑的曲线.

git checkout branch_name
git rebase target_branch_name

Level 41 rebase_onto

移动 commit 到指定分支

git rebase --onto target_branch_name soure_branch_name

Level 42 repack

清除一些垃圾打包对象

git repack -d

Level 43 cherry-pick

将某些 commit 移动到指定分支

git checkout target_branch_name
git log
git checkout source_branch_name
git cherry-pick commit_hash

Level 44 grep

统计关键字

git grep keyword
or
git grep --count TODO

Level 45 rename_commit

更正 commit message 语法错误

git rebase -i commit_hash
use reword to correct typo

Level 46 squash

对多次 commit 进行压缩

git rebase -i commit_hash
use squash to squash commit

Level 47 merge_squash

合并分支并压缩 commit

git merge --squash target_branch_name
git commit -m "your commit message"

Level 48 reorder

调整 commit 顺序

git rebase -i commit_hash

Level 49 bisect

Debug 哪一次 commit 出现错误

git bisect start HEAD first_commit_hash
git bisect good
git bisect bad

Level 50 stage_lines

对文件进行部分修改

git add -p file_name

Level 51 find_old_branch

通过 reflog 找回历史分支名

git reflog

Level 52 revert

撤销 commit

git revert commit_hash

Level 53 restore

恢复之前的 commit

git reflog
git checkout commit_hash

Level 54 conflict

解决合并冲突

git merge target_branch_names
git add conflict_file_name
git commit -m "your commit message"

Level 55 submodule

添加子模块代码到本地

git submodule add https://github.com/jackmaney/githug-include-me

Level 56 contribute

结束

Reference