almost 4 years ago

最近需要熟悉的技術,還不少
Git 的使用,也是其中一項

Git 的特異之處

  • git commit : 是 commit 到 local repository
  • git push : 將資料 push (commit) 到遠端, 合併到遠端的 repository
  • git pull : 將 remote 的修改,拉到 local 來
  • git checkout [branch-name] : 切換工作分支到 branch-name
  • 要看 remote branch 是否有更新時,記得要先下 git pull

日常作業中,需要用到的 git command

  • 比對某個 tag and 某個 commit 的 diff
    • git log --pretty=oneline tagA...commitHash 三個點
    • 如果不需要包含 tagA 的 commit
      • git log --pretty=oneline tagA..tagB , 兩個點
      • git log --pretty=oneline ^tagA tagB
    • 搭配 The Ultimate Git Alias Setup 服用
      • gl hf_20140910...17d161e:顯示 commit log
      • gll hf_20140910...17d161e:顯示 commit log and changed files

列出常用的 git command , Git Reference

  • git clone
  • git add : 將目前「工作目錄」的變更寫入到「索引檔」裡,包含 新增 & 修改的檔案
  • git commit -m "xxxx" : 將變更的資料,commit 到 local repository 中
  • git status : 顯示 working tree 的狀態
  • git log : 顯示 git log
  • git log --pretty=oneline : 列出 單行 精簡的 log 資料
  • git push origin master
  • git init : 將新建立好的目錄,建立 git source control
  • git config --list
  • git checkout master xxx : 不要目前編輯的檔案,直接拿回 master 中沒修改的版本
  • git push --tags : 將 tag push 到 remote server, tag 需要另外 push

閱讀心得 & 記錄

  • 參與 Git 開發的每個人,都擁有完整的開發歷史紀錄
  • 執行 git clone,等同將 Git 版本庫取得「完整備份」
  • 整個版本庫中所有變更過的檔案與歷史紀錄,通通都會儲存在本機儲存庫(local repository)

git 中資料結構 - 了解儲存庫

  • 「物件」用來保存版本庫中所有檔案與版本紀錄
  • 「索引」則是用來保存當下要進版本庫之前的目錄狀態
  • 所有的 object 都是存放在 .git/objects/ 目錄中
  • git hash-object 1.txt : 顯示 1.txt 檔案的 hash file
  • git cat-file -p master : 顯示目前 master commit 的內容
  • git cat-file -p f223093a447b747c3785fad961e340b1eb830c29 : 顯示某個 hash-file 的內容,可能為檔案 or tree

與 branch 相關的 command

  • git branch : 顯示有哪些 branch
  • git branch [branch-name] : 建立一個新的 branch
  • git checkout -b [branch-name] : 建立一個新的 branch, 並切換到新的 branch 下
  • git checkout [branch-name] : 將工作分支,切換到 branch-name 下

git diff , 比對檔案

git 參照名稱 (refs)

參照名稱(ref):簡單來說就是 Git 物件的一個「指標」,用來指向特定 Git 物件,所以你可以把「參照名稱」想像成 Git 物件絕對名稱的別名 (Alias),用來幫助記憶

  • path : .git/refs/
    • .git/refs/heads/ : 本地分支
    • .git/refs/remotes/ : 遠端分支
    • .git/refs/tags/ : 標籤
  • .git/refs/heads/ : 每個 branch 都會在此 folder 建立一個檔案,檔案內容為每一 commit object
  • git show-ref : 顯示所有的參照

git 的相對名稱

  • ~ : 代表「第一個上層 commit 物件」的意思
  • ^ : 代表「擁有多個上層 commit 物件時,要代表第幾個第一代的上層物件」
  • HEAD 這個 commit 物件的前一版 : 用 HEAD~HEAD~1 來表示

git 暫存工作目錄與索引的變更狀態

  • git stash : 會將所有已列入追蹤(tracked)的檔案建立暫存版
  • git stash -u : 會包括所有已追蹤或未追蹤的檔案,全部都建立成暫存版
  • git stash pop : 將暫存資料取回
  • 會存一個 refs 到 .git\refs\stash, 內容包含
    • 1. 原本工作目錄的 HEAD 版本
    • 2. 原本工作目錄所包含的索引內容
    • 3. 原本工作目錄裡所有未追蹤的內容
  • 我們手邊改到一半的檔案,可能會有以下狀態
    • 新增檔案 (尚未列入追蹤的檔案) (untracked files)
    • 新增檔案 (已經加入索引的檔案) (tracked/staged files)
    • 修改檔案 (尚未加入索引的檔案) (tracked/unstaged files)
    • 修改檔案 (已經加入索引的檔案) (tracked/staged files)
    • 刪除檔案 (尚未加入索引的檔案) (tracked/unstaged files)
    • 刪除檔案 (已經加入索引的檔案) (tracked/staged files)

git config 選項設定

可參考的 config 設定

git config
* git config --global alias.co checkout
* git config --global alias.ci commit
* git config --global alias.st status
* git config --global alias.sts "status -s"
* git config --global alias.br branch
* git config --global alias.re remote
* git config --global alias.di diff
* git config --global alias.type "cat-file -t"
* git config --global alias.dump "cat-file -p"
* git config --global alias.lo "log --oneline"
* git config --global alias.ll "log --pretty=format:'%h %ad | %s%d [%Cgreen%an%Creset]' --graph --date=short"
* git config --global alias.lg "log --graph --pretty=format:'%Cred%h%Creset %ad |%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset' --abbrev-commit --date=short"
* git config --global core.autocrlf true
* git config --global help.autocorrect 1
* git config --system color.ui auto
* git config --local commit.template "~/git-commit-template.txt"

其餘的參考 Git - Alias, The Ultimate Git Alias Setup (最常用的 command 是 gla)

Tips

Reference

← 一些會用到的 mongo query vim 的使用記錄 →