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
结束