- 原文地址:My Personal Git Tricks Cheatsheet
- 原文做者:Antonin Januska
- 譯文出自:掘金翻譯計劃
- 本文永久連接:github.com/xitu/gold-m…
- 譯者:Pingren
- 校對者:zh1an,Badd,shixi-li
除了 「基礎的」 命令以外,每一個人都有他們經常使用的 Git 技巧。我想列出我願意在 .gitconfig
保存別名(alias)的命令。在文章末尾,你能夠看到一些在 git 以外與 git
相關的有意思的命令!:)前端
我常常忘記提交(commit)某文件,或者遺留了 console.log
在文件裏。我十分討厭如 刪除 console.log
的提交。所以,我將添加文件至暫存區,就好像我要提交同樣,接着運行命令:android
git commit --amend --reuse-message HEAD
複製代碼
這個命令會將文件加入上次提交,而且從新使用舊的提交信息。我將它的別名設置爲 git amend
,用於快速修正錯誤。ios
注意 基於底下評論區的回覆,也可使用命令 git commit --amend --no-edit
達到同樣的效果。git
舊的分支一般狀況下會落後至關久遠,久到我不得不許備好消除編譯錯誤、ci 錯誤,或者解決衝突。此時我最喜歡使用如下命令:github
git fetch origin # fetch latest origin
git rebase origin/master
複製代碼
經過這種方式,我將當前分支的提交都疊加在最新版本的 master 分支之上。json
有時,git log
命令的結果冗長。因爲我頻繁使用的前文中提過的 amend
命令,我傾向於查看最後一條提交記錄:後端
git log -1
複製代碼
有時,我把某個與個人分支不相關文件搞壞了。這一般發生在鎖文件上(mix.lock
、package-lock.json
等等)。我只是將這個文件「重置」回舊版本而不是還原一個可能包含許多其餘內容的提交:bash
git checkout hash值 mix.lock
複製代碼
接着我就能夠提交修復!區塊鏈
我偶爾會使用這個被低估的命令。當一個分支變得老舊,有時候從中只獲取真正須要的東西,比讓整個分支跟上進度簡單。舉個例子,這個分支有關於 UI 或後端的冗餘代碼。在這種狀況下,我可能只想從分支中挑選出特定的提交:fetch
git cherry-pick hash值
複製代碼
這將會把提交帶到你所處的分支。你也可使用列表!
git cherry-pick 第一個hash值 第二個hash值 第三個hash值
複製代碼
你也可使用區間:
git cherry-pick 開始的hash值..結束的hash值
複製代碼
這是一個高級功能,以致於我幾乎不用它。個人意思是,大概一年用一次。可是瞭解一下它仍是挺好的。有時,我丟失了提交:我不當心刪除了分支、重置或修改了一個提交。
在這些狀況下,知道 reflog
的存在就挺好的。它不是你當前所處的分支的提交日誌,它是你全部提交(包括了在失效分支之上)的日誌。然而,這個日誌將會隨着時間推移被清空(pruned),所以只有有關的信息會保留。
git reflog
複製代碼
這個命令將返回一個日誌,你能夠在某個提交之上使用挑選或者變基。使用 pipe 管道命令鏈接 grep
以後很是強大。
除了 git 命令,我也喜歡使用一些有趣的 bash 別名來幫助個人工做流。
爲了獲取當前分支的名字,我有這個別名:
alias git-branch="git branch | sed -n -e 's/^\* \(.*\)/\1/p'"
複製代碼
當我運行 git-branch
或者在其它命令中運行 $(git-branch)
,我將獲得我目前所在的分支的名字。
注意 基於評論區的回覆,我將它切換爲 git symbolic-ref --short HEAD
,能夠達到同樣的效果而且命令更具備可讀性。
雖然我肯定配置 .gitconfig
能夠解決問題,我暫時還沒弄清楚如何作(譯者注:使用命令 git config --global push.default current
,參見官方文檔)。當我在新的分支上首次運行推送命令時,我老是被要求先設置上游分支的跟蹤狀態。這種狀況下我使用別名:
alias git-up="git branch | sed -n -e 's/^\* \(.*\)/\1/p' | xargs git push -u origin "
複製代碼
如今當我運行 git-up
,我能夠推送當前的分支並設置好上游分支的跟蹤狀態!
基於評論中一些有用的反饋,我對我所使用的別名作了一些修改。
彷佛有許多新方式來獲取當前的分支名稱。若是你往上看,你將看到我使用了一個瘋狂的 sed
命令來獲取分支名稱。
如下是我使用的新辦法:
alias git-branch="git symbolic-ref --short HEAD"
複製代碼
它的運行與指望徹底同樣!
若是發現譯文存在錯誤或其餘須要改進的地方,歡迎到 掘金翻譯計劃 對譯文進行修改並 PR,也可得到相應獎勵積分。文章開頭的 本文永久連接 即爲本文在 GitHub 上的 MarkDown 連接。
掘金翻譯計劃 是一個翻譯優質互聯網技術文章的社區,文章來源爲 掘金 上的英文分享文章。內容覆蓋 Android、iOS、前端、後端、區塊鏈、產品、設計、人工智能等領域,想要查看更多優質譯文請持續關注 掘金翻譯計劃、官方微博、知乎專欄。