git 簡易備忘錄

VCS (version control system) 的解決方案之一,話說從前就只能自己保存不同版本的副本,後來有了最初的 RCS,目前開源。至於協同工作呢,一開始就是集中式版本控制嘛,但缺點你懂的,且後來儲存空間不值錢了,分散式系統當然就應運而生。而眾所周知 git 是 linux 之父幾乎以一人之力在十天內開發出來的,乃因原本跟 liux 社群合作的 BitKeeper 結束關係了,所以就自起爐灶。這個故事告訴我們,沒有絕對的壟斷實力,就不要隨便弄別人,特地去查了一下,他現在開源了 XD


status 看現在是啥狀況,可 -s 看精簡版
add 多用途:
  • 「開始追蹤」檔案 (就不再是untracted)
  • 「預存」檔案 ( 變成 staged,也就是預備下次commit就會交出去 )( 其實在這步驟會算出檔案內容的雜湊值,會存在.git裡面的我不知道具體位置的 staging area )
  • 可用 -A 一次添加全部,小寫不能喔
  • 以及做一些其它的事,像是「標記合併衝突(merge-conflicted)檔案為已解決」
.gitignore 針對你永遠不想追蹤的東西可以新建這玩意 ( 不然一直出現在 untracted 看了也煩 )
diff 不帶參數就是檢查 directory 跟 staged 區的差別 ( 所以你已經 add 了就看不到差異 ),用 --stage 可以看 staged 跟 last commit 的差別
difftool 可以外掛一些可視化較強的工具,用 git difftool --tool-help 來搞搞看
commit 把 staged 好的東西提交囉,若你想把下面註解著的狀態內容也放進提交文件的話可以 -v ,若懶得跳編輯器可以直接 -m '提交註解' 若剛剛提交稍有出錯可用 --amend 來覆蓋錯的。重點來了,如果你根本不想精確控制每次要提交的內容,那麼可以 git commit -a -m 'pass step add' ,這樣就會把 tracted 的所有 modified 的內容自己 add 以後幫你提交
log 查看歷史提交紀錄 -p 看修改內容 -2 限制只輸出最後兩筆 --graph 圖形化,要好看的話可以 git log --pretty=oneline --graph,可用 --decorate 查看分支指標,後來發現若要看到其他分支的歷史要加 --all。另有很多變形技巧且看 https://git-scm.com/book/zh-tw/v2/Git-基礎-檢視提交的歷史記錄
reset 可以把不小心放到 stage 的移出
branch 創建分支,如 git brach beta 此時你就有本來的 master 跟現在的 beta 兩個都會指向最後的提交,而此時 HEAD 應該還是指向 master ( 表示我目前還在 master 上工作 ),透過 -v 來看每個分支的最後一次提交,加上 --merged--no-merged 來看哪些融合了哪些還沒
checkout 來把 HEAD 指標指向別的分支如 git checkout beta 此時你看 git log --oneline --graph --decorate 就會發現 HEAD 指向 beta 了,而若 master 跟 beta 已經指向不同的快照了 ( 不同版本 ),那麼你 checkout 來切換時,工作目錄也會切換成不同的版本喔
再快一點:可以 git checkout -b beta 就不用先創立 branch 了!
merge 焦點在master上,此時 git merge hotfix 則把 hotfix 這個分支的修正事項都融進 master 裡,此時 master 就被 fast-forward 到跟 hotfix 指向同一個版本,此時可以透過 git branch -d hotfix 來把 hotfix 刪除
rebase 焦點在bug上,此時 git rebase master ,bug版本就變成master的下個版本了(把分支放進主幹,變簡潔好看)。更快點: git rebase master bug (把 bug 接種到 master 上)這樣就不用先切焦點了。注意:git book 提醒「总的原则是,只对尚未推送或分享给别人的本地修改执行变基操作清理历史,从不对已推送至别处的提交执行变基操作。」因為 rebase 就是修剪枝幹使其整潔,所以牽涉到歷史記錄的修改,你可以選擇修飾你自己的歷史(反正人本來就是不斷地欺騙自己),但不能任性地擺弄大家的。
remote 來個遠端吧,用 git remote add '此遠端代稱' <url> ,然後把本地推到遠端 git push -u '代稱' master 話說 -u 就會把這個遠端追蹤起來之後就不用特別打 remote name 了
每次 push 都要打帳密太麻煩可以先 git config --global credential.helper store 然後執行 push 輸入,之後就都緩存不用重複了,可見 https://zlargon.gitbooks.io/git-tutorial/content/remote/upstream.html
clone 把遠端的整個方案複製一份到本地
復原:
checkout可以復原檔案到某次 commit 的樣子 git checkout —該commit雜湊值
也可以 git checkout -<file name> 就可以復原該檔案成「上次」commit 的內容
突然想回到過去創分支(我是真的突然想):
就用 git checkout -<file name>飛過去,然後 git checkout -b branch_name 就可以囉
可見(裏頭的其他內容也都很不錯):https://gitbook.tw/chapters/branch/branch-from-old-commit.html

留言

這個網誌中的熱門文章

肌梭 muscle spindle

米氏散射、瑞利散射、拉曼散射

重升重降記號做啥用?到底何苦呢?