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"至待提交區(qū)
$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 文件 并添加規(guī)則 '*.swp'
level-8
include: 忽略后綴為.a的文件,但lib.a除外
編輯.gitignore如下
.a
!lib.a
level-9
status: 找出未加入提交區(qū)的文件
$git status
level-10
status: 查看提交區(qū)的信息 -v 查看新增文件,待提交文件等信息
$git status -v
level-11
rm:刪除移除提交區(qū)的文件
$git status
$rm deleteme.rb
level-12
-cache: 從提交區(qū)移除文件 --cached 保留文件 -f 刪除文件
$git rm --cached deleteme.rb
level-13
stash: 保存修改,但不保存到提交區(qū)
$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: 將特定文件重置到上一次提交的狀態(tài)
$git checkout config.rb
level-24
remote: 查看遠程倉庫
$git remote
level-25
remote-url:查看遠程倉庫鏈接
$git remote-v
level-26
pull:遠程倉庫拉取數(shù)據(jù)到本地分支
$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 @@ 指下一行的行數(shù)
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到現(xiàn)有分支中
場景:增加新功能,但不沿用新功能分支中的其他提交
$git cherry-pick ca32a6da //sha-1值
level-43
grep: 查找?guī)熘心扯挝淖?br>
場景:查看有多少TODO
$git grep TODO -n//附加行數(shù)
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
//提示需要進行提交來繼續(xù)
$git commit -m'all'
level-47
reorder: 修改提交順序
$git log //查看需要合并的提交
$git rebase -i HEAD~3 //rebase 到修改提交之前
//在修改vim界面,調整commit順序
level-48
bisect: 查找錯誤提交
場景: 發(fā)現(xiàn)在提交中有一個錯誤提交,用測試方法'run test' 來找出錯誤提交
$git log //查看提交歷史
$git bisect start//開始查找
$ git bisect bad 7c0dcfa //標記壞節(jié)點
$ git bisect good master 34567ab//標記好節(jié)點
//git 自動幫我們找出中間節(jié)點
$git bisect run make test //自動運行測試命令
//git提示說找到錯誤節(jié)點
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'的現(xiàn)場
$git reflog //查看操作記錄
$git checkout e456754//簽出到未破壞的現(xiàn)場
level-53
conflict:解決合并沖突
$git merge mybranch
$vim poem.txt
$git commit -a -m'merge'
level-54
submodule:添加git倉庫的子模塊
場景:需要對依賴庫進行修改和版本控制,且易于統(tǒng)一控制
$git submodule add https://github.com/include_me
額外情況: 下載別人包括submodule的庫
$git clone https://github.com/foo
$cd foo
$git submodule init
$git submodule update //更新依賴庫