Git 使用經驗及心得

海龍獨仙發表於2018-05-28

記錄這個的原因,是因為最近公司的伺服器上的 git 管理工具從 gitlab 遷移到了非常輕量級的 gogs 上,然後由我主導這次程式碼遷移,遷移倉庫地址倒是很簡單,就是 git 工作流發生了變化 ,寫了個 wiki 給同事們參考,中途自己也學了些其他的東西,從頭好好梳理一下我的 git 使用習慣,記錄一下

基本使用

1. 儲存密碼

最開始工作的時候並不是mac 電腦,看同事們的 mac 鑰匙串能夠自動儲存git認證資訊,每次不需要手動輸入很羨慕,後面經過自己研究,發現windows下也能夠實現儲存認證資訊就是用如下命令

git config --global credential.helper store
複製程式碼

這樣在你輸入一次賬號密碼後.你這個倉庫的賬號密碼git都會幫你存在本地,下次提交就不需要再次輸入密碼了.還是節省了很多時間

2. 設定代理

有時候想在 github 找一些開源專案clone 下來學習一下.但是在天朝有時候 訪問github的時候很慢,git clone 的時候實在太慢了,所以想著能不能通過代理來訪問.檢視文件,發現果然有,通過如下方式

git config --global http.proxy socks5://127.0.0.1:1080 
git config --global https.proxy socks5://127.0.0.1:1080 
git config --global --unset http.proxy 
git config --global --unset https.proxy 
複製程式碼

socks5協議都懂的就不多說咯,這樣就是把http和https協議的資料都設定只走代理.github下載嗖嗖的快...後面兩個命令是取消掉代理,偶爾碰到訪問不了github的時候就可以用到這個啦

3.刪除特定提交

這種情況需要先用git log命令在歷史記錄中查詢到想要刪除的某次提交的commit id,比如下圖中圈出來的commit id 我是通過提交資訊的,所以一定要寫好提交註釋.方便後面有可能需要的查詢

Git 使用經驗及心得

然後執行以下命令(”commit id”替換為想要刪除的提交的”commit id”

git rebase -i "commit id" 執行該條命令之後會開啟一個編輯框,內容如下,列出了包含該次提交在內之後的所有提交。

Git 使用經驗及心得
然後在編輯框中刪除你想要刪除的提交所在行,然後儲存退出就好啦,哦,進入的是vim的編輯器.輸入當前行用dd 就可以了.儲存後,如果有衝突的需要解決衝突。接下來,執行以下命令,將本地倉庫提交到遠端庫就完成了:

git push origin master -f

4.恢復誤操作刪除的分支

前面說的是怎麼刪除,這次我們來說說怎麼恢復,當然恢復的前提是你這個分支的更改有提交資訊,提交到本地倉庫,如果你的改動沒有提交到本地倉庫,那就找不回來了 首先我們先新建一個分支,隨便修改一些,然後提交了刪除這個分支

Git 使用經驗及心得
接下來我們通過 git log -g 來找到這次提交
Git 使用經驗及心得
可以發現我們這次提交還是通過git log 查詢到 當然 如果你的提交歷史很靠前用 git log 可能需要翻很久歷史才能找到 提交資訊,我們可以通過 git reflog來定位你的提交資訊

git reflog  show | grep  branchName
git reflog  show | grep  commit message
複製程式碼

reflog是git提供的一個內部工具,用於記錄對git倉庫進行的各種操作 可以使用git reflog show或git log -g命令來看到所有的操作日誌 找到你最後一次提交的commit_id git branch branchName commit_id就可以恢復這個分支了

5. 批量刪除遠端分支

哈哈,還是回到刪除吧.我們公司之前的git flow 是 develop/release/feature/bugfix/ 四個分類並行,通過gitlab的merge request 來管理. 所以遠端倉庫充斥著一堆 bugfix feature 分支.去年一年產生了近兩百個分支.提merge request的時候 搜尋起來都麻煩的要死. 趁著這次遷移程式碼到 gogs 上去,剛好git flow也要切換到 github flow 以後主倉庫只留 develop release 兩個種類的分支.bugfix,feature 都建在自己的倉庫裡,然後提pull request 到主倉庫.所以主倉庫沒必要留那麼多分支了. 但是遷移的時候已經運維把整個資料庫裡的倉庫資訊已經匯入 到gogs 上.所以那麼多垃圾分支也跟著一起過來了.沒辦法,只能手動刪除了.又不想一個個的刪除. 就找到了個批量刪除分支的方法

git branch -r| awk -F '[/]' '/bugfix\17/ {printf "%s/%s\n",$2,$3}' |xargs -i{} git push origin :{}
複製程式碼

這個命令就是把遠端的所有包含 bugfix/17 的分支全刪了,也就是我們去年所有的bugfix 分支全部刪除,這個命令支援正則,可以自定義規則刪除分支

其他一些簡單的新增更改遠端倉庫就不一一寫出來了.都是一些簡單的東西,如果你對上面這些命令有疑問,或者你有更好的方法來實現這些,希望你能留言與我一起分享探討

相關文章