打怪(githug)升級過程中:
githug安裝
首先我們需要來安裝這個遊戲,githug 是用 Ruby 編寫的,可通過如下命令安裝:
gem install githug
如果遇到許可權問題,請加上sudo:
sudo gem install githug
安裝成功後,在 Terminal 裡進入你常用的目錄,輸入githug,會提示遊戲目錄不存在,是否要建立一個,輸入y然後回車:
根據提示cd git_hug 進入遊戲目錄,準備開始遊戲。
輸入 githug 進行過關檢測和本關要完成的任務等資訊.
下面是本人在一次githug闖關過程總的一些記錄,一些特別熟悉簡單的方式就沒有記錄下來.
0x06
git clone 遠端庫 本地資料夾
0x12
如果一個檔案已經add到暫存區,還沒有commit,此時如果不想要這個檔案了,有兩種方法:
-
用版本庫內容清空暫存區,git reset HEAD
-
只把特定檔案從暫存區刪除,git rm –cache
0x14
直接在暫存區進行檔案重新命名
-
git mv oldfile newfile
上面這一句相當於
-
mv oldfile newfile
-
git rm oldfile
-
git add newfile
0x16
如果將檔案進行了add操作,但是又想重構下將所有的.html檔案放到src目錄下
-
mkdir src
-
git mv *.html src/
0x19
可以通過git commit –amend來進行最近一次的commit資訊修改. 如出現一次commit有檔案忘記add加進去,git這麼好當然有補救措施了.
-
git add .
-
git commit –amend
進行儲存就將遺漏沒有提交的檔案提交上去了
0x20
將提交的時間自己設定,commit的時間是2號將其修改到3號
-
git commit –date=”Sat Jan 3 11:21:00 2016 +0800″ -m `commit_in_future`
liutxer@liutxer:~/git_hug$ git log commit 94271f606f8ea98c6e435614e338760b066bdd5c Author: liutxer <liutxer@163.com> Date: Sun Jan 3 11:21:00 2016 +0800
0x21
git reset HEAD <file>
可將暫存區對應的<file>檔案恢復到和HEAD中的一致,狀態仍然為commited,這裡要區別於上面的git rm –cache命令,後者只是簡單的將暫存區的file檔案刪除.
0x22
git reset --soft commitID
,將HEAD指向commitID,index和work directory不變,通過git status看到最後一次沒有commit的所有操作
0x28
git rebase <branch>
的運用.可以參考git rebase
0x30
git blame <file>
可以看到檔案中具體提交使用者資訊
0x34
當遇到分支和標籤重名的情況下,而又想直接切到標籤,這個時候可以使用全名如:
-
git checkout tags/v1.0
0x41
git gc. git版本控制沒有采用增量的方式儲存檔案,而是當檔案發生修改提交後,將整個檔案進行儲存,不是對其增量進行儲存.這種做法提高了git的使用效率,但是很容易導致倉庫中程式碼的重複度增高,從而造成倉庫體積過大的問題.當遇到這種問題或者需要將版本庫推送到遠端的時候可以進行打包後再推送.
0x42
加入git版本庫中存在兩個分支分別為:master和dev當我們想將dev中的某個commitID應用到master中,我們可以使用git cherry-pick commitID.如果出現衝突可以應用常規的解決衝突的辦法,最後使用git commit -c commitID
0x43
git grep檢視git版本庫中某欄位.和linux上的grep作用類似
0x44
重新命名commit註釋.
git branch tmp
git reset --soft commitID
git commit --amend //這裡修改commit註釋
git cherry-pick <後面的commitID>
當然這裡有更加直接的辦法,直接用git rebase -i來進行指定commit來修改對應的commit
0x45
git rebase -i <after-this-commit>
以互動的方式蟲心組織<after-this-commit>
之後的所有提交.可以將多個commit squash到一起,或者直接對某個commit進行編輯,做0x44所示的工作.
可以直接將每個commit行進行順序顛倒,重新組織提交順序.這個就是0x47了
0x46
git merge --squash <branch>
--squash
選項的含義是:本地檔案內容與不使用該選項的合併結果相同,但是不提交、不移動HEAD,因此需要一條額外的commit命令。其效果相當於將another分支上的多個commit合併成一個,放在當前分支上,原來的commit歷史則沒有拿過來。
0x48
git bisect
可以用來查詢引入bug的commit.
git bisect start <bad-commit> <good-commit>
run command
git bisect bad if run command error else git bisect good
直到整個二分查詢結束,可以看到引入bug的commitID
0x49
互動式add(或者叫add塊),將會一個塊一個快的迴圈你的改動。使用命令git add -p時,你可以在每個改動“塊”(即:連續的改動會被組織到一起)時進行一些選擇,比如:切分當前塊為更小的塊、跳過一個改動塊、甚至手動的編輯該塊,你可以敲入?來檢視所有該命令提供的選項。
0x51
git revert commitID
可以撤消一個commit的動作,並把這次的撤消操作作為一次新的提交
0x52
git reset --hard ORIG_HEAD
返回到上次HEAD指向的位置.