git 已經成為了我日常必備工具之一,我總結我幾乎每天使用的8個有用(且簡潔)的小技巧。
使用-p選擇性添加當你想提交內容時,你可以通過使用 git commit -am 來選擇所有文件或使用 git add file 來添加特定文件。然而,有時候你可能想只添加文件的一部分來提交。你可以用 git add -p 交互性地選擇哪些你想提交的部分。
在選擇完你所想要提交的區塊後,只需要做一個 git commit(沒有 -a),這樣只會提交選中的部分。同樣可以使用 git checkout -p 來選擇需要恢復的部分。添加後,你可以使用 git diff –cached 來查看差異。
交互式的重建基准(Interactive Rebase)如果你在一個分支上工作,同時進行了一些 WIP 提交(commit) ,以用來壓縮合並(squash)或者刪除一個提交(commit)以及這個提交的恢復, 你可以做一個交互式的重建基准(rebase),用來重新組織提交。
為了做到這點,你需要運行命令 git rebase -i <commit>,這裡的<commit>是你想要重寫之前的一個提交(commit)的sha1值。接下來,它將在你的編輯器(在$EDITOR環境變量,或者git配置裡面指定的編輯器)上面打開一些指令,用來變更提交(commit)歷史,你可以選擇壓縮合並(將兩次提交合並為一次新的提交),重寫(變更提交信息),編輯甚至刪除一個提交(commit)。
請注意這改變了歷史信息,因此,如果你提交了這個變更,你將不得不再一次強制提交(push),所以,絕不要在主分支,或者有其他人(除你之外)在使用的分支上面做這個操作。
儲藏(Stashing)如果你正忙於什麼事情,你必須更改文本去修復其他問題,去git stash查到到儲藏在當前中的更改。然而,過一段時間後,你可能就會忘記關於這個已儲藏的變更。因此,我試著去保持一個儲藏0(就像收件箱0如果沒有儲藏的情況)規則。每一次我儲藏一個美元信號出現在我的輸出,並且我通過git stash show -p檢查,還可以通過git stash pop彈出或者通過git stash clear丟棄。
全局gitignore在項目的根目錄,你可以通過文件.gitignore來指定git需要忽略的文件。但是,如果存在git需要忽略的文件,同時,你又是唯一創建這個文件的人(如vim的 bkp文件,編輯器或者操作系統生成的一些文件,如OSX生成的.DS_Store文件),你可以在配置文件中指定全局的gitignore文件,它和工程中的.gitignore文件使用一樣的語法格式。
git config --global core.excludesfile=/Users/flores/.gitignore
空格警告我不得不承認:有時候我忘記代碼尾部的一些空格。但是,通常我不會提交它們,因為我使用了這個選項:apply.whitespace=warn。每次我通過git add -p增加文件中的一大塊代碼,同時,這個代碼塊尾部包含空格,由於git給出警告提示,因此我可以在提交前修正它們。
自動重建代碼基准(Auto setup rebase)另一個很酷的技巧是自動重建代碼基准(auto setup rebase)。如果你有一個分支,並做了一些commit但並未push。同時,其他人也在這個分支上進行了commit和push。當你pull的時候,git會創建一個commit來合並你的commit到上游(upstream)commit。由於這個commit毫無意義,我更傾向於,在pull時,通過配置來自動重建代碼基准(auto setup rebase):branch.autosetuprebase=always。設置之後,每個pull操作,git都會嘗試在當前版本的上游(upsteam)分支重新使用你的commit。
更好的日志(logging)你是否嘗試過在一個分支中找一個特定的提交啊? git log 給我們提供了一些基本的信息,不過你使用下面的命令會得到更多有用的信息:
git log --graph --decorate --pretty=oneline --abbrev-commit
–graph 會在各個提交之間打印出線條,這些線條可以展示出分支之間的關系。
–decorate 顯示出分支處在哪一次提交上。
–pretty=oneline 只是在一行中顯示 sha1 和 提交的注釋(譯者將title一詞應對到更精確的注釋)
–abbrev-commit 用開始的7個sha1字符代替整個sha1(他在你的倉庫中是唯一的)。
你可以到 explain shell 去看這些選項的更詳細(且是完整)的解釋。
改寫提交的注釋如果你在提交代碼的時候注釋不能准確的描述當前提交,或者你寫了錯別字。你可以使用 git commit –amend 來改寫你已經提交的注釋。 他允許你在命令行中通過 -m 選項來指定新注釋或直接打開系統默認編輯器讓你來編輯新的注釋。 另外你還可以把一些新的變化加入到上一次提交中。請記住 該操作和 Interactive Rebase 一樣,他會改變提交歷史。如果你已經把你改動的這次提交push了,那麼你需要強制(force)push這次變化。
歡迎你在評論中分享你在工作中發現一些能提升工作效率的 git小技巧。