我是 Git, GitHub 的重度使用者,可以說是吃飯用的工具。就在這邊整理一些 Git 的筆記。
打開 git 的指令自動訂正功能
$ git config --global help.autocorrect 1
Fetch GitHub 上的 PR(Pull Request)
假設有個人發佈一個 Pull Request ,那麼除了開一個分支去 pull 他的分支之外,還可以用 fetch 的方式把 PR 抓回來,這種方式會直接在 local 開一個相對應的分支名稱,再 checkout 過去就好。
指令:
$ git fetch origin pull/<pull_request_id>/head:<branch_name>
$ git checkout <branch_name>
例如有個人的 Pull Request ID 是 3, 分支名稱是 merge_me
,指令就會長這樣:
$ git checkout -b merge_me
$ git fetch origin pull/3/head:merge_me
此外, Git 的文件也有提到可以用 –track 跟遠端分支同步
$ git checkout -b <branch> --track <remote>/<branch>
p.s. branch 名稱要相同
例如:
$ git checkout -b merge_me --track origin/merge_me
Mirror local repository to remote
除了將 branch 一個一個 push 到 remote repository 之外,其實還可以在 repository 中設定 mirror ,這個 mirror 就會將本地端(local)的所有 branch 一起 mirror 到 remote repository 。
指令:
$ git remote add backup your_server:/path/to/backup/repo
$ git push --mirror backup
or
$ git config alias.backup "push --mirror backup" # 設定 alias
$ git backup
p.s. 記得在 remote 先建好 git repository
例如:
$ git remote add backup 123.123.123.123:/home/user/mirror_repo
$ git push --mirror backup
搜尋含有特定關鍵字的相關 commit (包含 diff)
有時候想搜尋哪些 commit 中對特定行做了修改,可以利用 git log -S
指定關鍵字來進行搜尋。
指令:
$ git log -c -S'your_keyword'
p.s. -c
代表顯示 commit 的 diff
p.s. 也有 -G
正規表示式的用法!
刪除 remote branch
$ git push origin :remote-branch-name
或者
$ git push origin --delete remote-branch-name
強制將行尾的空格視為 error ,避免 commit 行尾的空格
$ git config --global core.whitespace trailing-space
p.s. 還有 space-before-tab
, blank-at-eof
等參數可使用,詳見 man git-diff
設定 global 的 gitignore
$ git config --global core.excludesfile '~/.gitignore'
切換回最近一次使用的 branch
用途跟 cd -
很像, git 也有類似的用法:
$ git checkout -
查看已經 merge 哪些分支
$ git branch --merged
* master
feature1
feature2
上述代表 master 已經合併了 feature1, feature2 2 個分支。
從某個 branch 直接複製檔案
以下指令可以複製某個 branch 上的檔案而不需切換分支。
$ git checkout <the_branch> -- <file_path>
以 word 為單位顯示 diff
在編修文字段落時,可以使用 --word-diff
用 word 為單位進行 diff 。避免以 line 為單位看不出何處變動。
$ git diff --word-diff
查看 contributors & number of commits
$ git shortlog -sn
將某個檔案回復到某個時間點/commit
$ git checkout v1.2.3 -- file # tag v1.2.3
$ git checkout stable -- file # stable branch
$ git checkout origin/master -- file # upstream master
$ git checkout HEAD -- file # the version from the most recent commit
$ git checkout HEAD^ -- file # the version before the most recent commit