Git常用命令
在用Git進行項目管理的時候有一些經(jīng)常會遇到的問題處理起來比較復(fù)雜躬柬,本文記錄了一些常用的命令和操作原杂。
一链蕊、修改某一次提交的說明信息
有時候我們需要修改之前提交的時候的說明信息敦锌,沒有操作命令可以直接完成馒疹,但是使用rebase命令可以實現(xiàn)。
例如我們要修改倒數(shù)第二次的提交的說明信息:
$ git rebase -i HEAD~3
注意:這里HEAD~后面跟著的是3而不是2乙墙,因為這里指的是要修改的提交的父提交颖变。
之后會進入到文本編輯界面,如下圖
將要修改的提交前面的 pick 改為 edit 伶丐,保存后退出悼做。
這個時候執(zhí)行
$ git rebase --continue
執(zhí)行這條命令后,后續(xù)的提交說明將不會改變哗魂。
注:不要修改已經(jīng) push 到遠(yuǎn)程倉庫的提交8刈摺!录别!會引起版本混亂朽色,使提交歷史變的不清晰!
二组题、查看葫男、刪除、重命名遠(yuǎn)程分支
查看所有的分支(包括遠(yuǎn)程分支)
$ git branch -a
當(dāng)一個分支已經(jīng)被合并到主分支后崔列,我們通常會刪除這個分支梢褐,如果僅僅 git branch -d 是刪除本地分支
刪除遠(yuǎn)程分支的話可以使用如下命令
$ git push origin --delete <branchName>
重命名一個分支不是很常用,可以先刪除遠(yuǎn)程分支赵讯,再重命名本地分支盈咳,之后將重命名后的本地分支推送到遠(yuǎn)程倉庫
$ git push --delete origin <branchName>
$ git branch -m <branchName> <newBranchName>
$ git push origin <newBranchName>
三、合并多個提交
比如要合并最后兩次的提交边翼,其實和修改某一次提交的說明信息有點類似鱼响。
$ git rebase -i HEAD~2
之后同樣會進入到文本編輯界面,將第二行開頭的 pick 改為 squash 或 s组底,保存后退出丈积。
這時git會把兩次提交合并,并且提示讓你輸入新的提交信息债鸡,保存后退出就成功完成兩次提交的合并了江滨。
四、強制回退遠(yuǎn)程倉庫到指定提交
當(dāng)我們在開發(fā)的時候出現(xiàn)一些關(guān)鍵性的錯誤厌均,并且確認(rèn)現(xiàn)在已經(jīng)做的開發(fā)工作是無意義的時候牙寞,可能需要回退到之前的版本。
$ git reset --hard <commit_id>
$ git push origin HEAD --force
另外,reset命令還有幾個可選參數(shù)
- git reset –mixed:此為默認(rèn)方式间雀,不帶任何參數(shù)的git reset,即時這種方式镊屎,它回退到某個版本惹挟,只保留源碼,回退commit和index信息缝驳。
- git reset –soft:回退到某個版本连锯,只回退了commit的信息,不會恢復(fù)到indexfile一級用狱。如果還要提交运怖,直接commit即可。
- git reset –hard:徹底回退到某個版本夏伊,本地的源碼也會變?yōu)樯弦粋€版本的內(nèi)容摇展。
五、reset –hard之后的恢復(fù)
使用 git reset --hard 之后溺忧,也許才發(fā)現(xiàn)這是一次錯誤的操作咏连,那么我們就想要恢復(fù)到之前的版本。
這個時候用git log是看不到之前的提交歷史記錄的鲁森。
需要使用 $ git reflog 找到我們需要恢復(fù)的HEAD的ID祟滴,然后使用reset命令恢復(fù)回去。
六歌溉、查看指定版本的某個文件的內(nèi)容
例如要查看 f4869b0 這次提交的 test.cpp 文件的內(nèi)容垄懂,test.cpp的路徑需要使用相對于git目錄的路徑名,使用如下命令:
$ git show f4869b0:test.cpp
文件的內(nèi)容會全部顯示在界面上痛垛,可以使用文件重定向到另外的文件草慧,再進行后續(xù)操作。
七榜晦、將遠(yuǎn)程分支已經(jīng)刪除的殘留的本地分支追蹤信息刪除
經(jīng)過一段時間的開發(fā)后冠蒋,遠(yuǎn)端的一些被 merge 后刪除的分支,在本地使用 git branch -a 還是能看到乾胶,需要取消追蹤并刪除抖剿。
$ git fetch --prune