[譯] 我我的的 Git 技巧備忘錄

我我的的 Git 技巧備忘錄

除了 「基礎的」 命令以外,每一個人都有他們經常使用的 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

在 origin/master 分支的頂部變基

舊的分支一般狀況下會落後至關久遠,久到我不得不許備好消除編譯錯誤、ci 錯誤,或者解決衝突。此時我最喜歡使用如下命令:github

git fetch origin # fetch latest origin
git rebase origin/master
複製代碼

經過這種方式,我將當前分支的提交都疊加在最新版本的 master 分支之上。json

上次的提交

有時,git log 命令的結果冗長。因爲我頻繁使用的前文中提過的 amend 命令,我傾向於查看最後一條提交記錄:後端

git log -1
複製代碼

簽出到舊版文件 (好比一個鎖文件!)

有時,我把某個與個人分支不相關文件搞壞了。這一般發生在鎖文件上(mix.lockpackage-lock.json 等等)。我只是將這個文件「重置」回舊版本而不是還原一個可能包含許多其餘內容的提交:bash

git checkout hash值 mix.lock
複製代碼

接着我就能夠提交修復!區塊鏈

cherry-pick

我偶爾會使用這個被低估的命令。當一個分支變得老舊,有時候從中只獲取真正須要的東西,比讓整個分支跟上進度簡單。舉個例子,這個分支有關於 UI 或後端的冗餘代碼。在這種狀況下,我可能只想從分支中挑選出特定的提交:fetch

git cherry-pick hash複製代碼

這將會把提交帶到你所處的分支。你也可使用列表!

git cherry-pick 第一個hash值 第二個hash值 第三個hash複製代碼

你也可使用區間:

git cherry-pick 開始的hash值..結束的hash複製代碼

參考日誌

這是一個高級功能,以致於我幾乎不用它。個人意思是,大概一年用一次。可是瞭解一下它仍是挺好的。有時,我丟失了提交:我不當心刪除了分支、重置或修改了一個提交。

在這些狀況下,知道 reflog 的存在就挺好的。它不是你當前所處的分支的提交日誌,它是你全部提交(包括了在失效分支之上)的日誌。然而,這個日誌將會隨着時間推移被清空(pruned),所以只有有關的信息會保留。

git reflog
複製代碼

這個命令將返回一個日誌,你能夠在某個提交之上使用挑選或者變基。使用 pipe 管道命令鏈接 grep 以後很是強大。

Bash 命令別名

除了 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 連接。


掘金翻譯計劃 是一個翻譯優質互聯網技術文章的社區,文章來源爲 掘金 上的英文分享文章。內容覆蓋 AndroidiOS前端後端區塊鏈產品設計人工智能等領域,想要查看更多優質譯文請持續關注 掘金翻譯計劃官方微博知乎專欄

相關文章
相關標籤/搜索