Git常用命令
在用Git進(jìn)行項(xiàng)目管理的時(shí)候有一些經(jīng)常會(huì)遇到的問(wèn)題處理起來(lái)比較復(fù)雜,本文記錄了一些常用的命令和操作。
一、修改某一次提交的說(shuō)明信息
有時(shí)候我們需要修改之前提交的時(shí)候的說(shuō)明信息,沒(méi)有操作命令可以直接完成,但是使用rebase命令可以實(shí)現(xiàn)。
例如我們要修改倒數(shù)第二次的提交的說(shuō)明信息:
$ git rebase -i HEAD~3
注意:這里HEAD~后面跟著的是3而不是2,因?yàn)檫@里指的是要修改的提交的父提交。
之后會(huì)進(jìn)入到文本編輯界面,如下圖

將要修改的提交前面的 pick 改為 edit ,保存后退出。
這個(gè)時(shí)候執(zhí)行
$ git rebase --continue
執(zhí)行這條命令后,后續(xù)的提交說(shuō)明將不會(huì)改變。
注:不要修改已經(jīng) push 到遠(yuǎn)程倉(cāng)庫(kù)的提交?。。?huì)引起版本混亂,使提交歷史變的不清晰!
二、查看、刪除、重命名遠(yuǎn)程分支
查看所有的分支(包括遠(yuǎn)程分支)
$ git branch -a
當(dāng)一個(gè)分支已經(jīng)被合并到主分支后,我們通常會(huì)刪除這個(gè)分支,如果僅僅 git branch -d 是刪除本地分支
刪除遠(yuǎn)程分支的話可以使用如下命令
$ git push origin --delete <branchName>
重命名一個(gè)分支不是很常用,可以先刪除遠(yuǎn)程分支,再重命名本地分支,之后將重命名后的本地分支推送到遠(yuǎn)程倉(cāng)庫(kù)
$ git push --delete origin <branchName>
$ git branch -m <branchName> <newBranchName>
$ git push origin <newBranchName>
三、合并多個(gè)提交
比如要合并最后兩次的提交,其實(shí)和修改某一次提交的說(shuō)明信息有點(diǎn)類(lèi)似。
$ git rebase -i HEAD~2
之后同樣會(huì)進(jìn)入到文本編輯界面,將第二行開(kāi)頭的 pick 改為 squash 或 s,保存后退出。
這時(shí)git會(huì)把兩次提交合并,并且提示讓你輸入新的提交信息,保存后退出就成功完成兩次提交的合并了。
四、強(qiáng)制回退遠(yuǎn)程倉(cāng)庫(kù)到指定提交
當(dāng)我們?cè)陂_(kāi)發(fā)的時(shí)候出現(xiàn)一些關(guān)鍵性的錯(cuò)誤,并且確認(rèn)現(xiàn)在已經(jīng)做的開(kāi)發(fā)工作是無(wú)意義的時(shí)候,可能需要回退到之前的版本。
$ git reset --hard <commit_id>
$ git push origin HEAD --force
另外,reset命令還有幾個(gè)可選參數(shù)
- git reset –mixed:此為默認(rèn)方式,不帶任何參數(shù)的git reset,即時(shí)這種方式,它回退到某個(gè)版本,只保留源碼,回退commit和index信息。
- git reset –soft:回退到某個(gè)版本,只回退了commit的信息,不會(huì)恢復(fù)到indexfile一級(jí)。如果還要提交,直接commit即可。
- git reset –hard:徹底回退到某個(gè)版本,本地的源碼也會(huì)變?yōu)樯弦粋€(gè)版本的內(nèi)容。
五、reset –hard之后的恢復(fù)
使用 git reset --hard 之后,也許才發(fā)現(xiàn)這是一次錯(cuò)誤的操作,那么我們就想要恢復(fù)到之前的版本。
這個(gè)時(shí)候用git log是看不到之前的提交歷史記錄的。
需要使用 $ git reflog 找到我們需要恢復(fù)的HEAD的ID,然后使用reset命令恢復(fù)回去。
六、查看指定版本的某個(gè)文件的內(nèi)容
例如要查看 f4869b0 這次提交的 test.cpp 文件的內(nèi)容,test.cpp的路徑需要使用相對(duì)于git目錄的路徑名,使用如下命令:
$ git show f4869b0:test.cpp
文件的內(nèi)容會(huì)全部顯示在界面上,可以使用文件重定向到另外的文件,再進(jìn)行后續(xù)操作。
七、將遠(yuǎn)程分支已經(jīng)刪除的殘留的本地分支追蹤信息刪除
經(jīng)過(guò)一段時(shí)間的開(kāi)發(fā)后,遠(yuǎn)端的一些被 merge 后刪除的分支,在本地使用 git branch -a 還是能看到,需要取消追蹤并刪除。
$ git fetch --prune