寫在前面
Git想必大家都熟悉了,由于現(xiàn)在Git的管理工具用的的確很方便,估計大家都用Git管理工具了,所以真正能夠熟練用終端敲出常用的Git命令,想必沒有多少人(當然也包括我)。
我用Git比較無規(guī)律,都是混合使用的:終端Git命令(會一些常用的) + Xcode自帶Git管理工具 + SourceTree。具體會使用哪種方式,完全看心情和操作的熟練度。
最近閑來無事(等后臺哥們的接口),索性看了下常用的Git終端命令,順便做了下筆記與大家分享,當然也方便了以后自己的查閱。
本文Git常用命令知識點基本來自“廖雪峰 ”前輩的Git教程。若對Git沒有些許的了解,只看常用命令可能對大家的幫助不是太大,所以建議大家有空的時候花點時間去看下“廖雪峰 ”前輩的Git教程,通熟易懂,相信會有所收獲。
最后,若文章有什么錯誤的地方,望評論指出。
git init
初始化一個Git倉庫:把某個目錄變成Git可以管理的倉庫
git add test.h
把文件test.h添加到倉庫
git commit -m "添加了test.h文件"
把文件提交到倉庫。(git commit命令,-m后面輸入的是本次提交的說明)
git status
查看工作區(qū)的狀態(tài)
git diff test.h
查看test.h文件修改了什么(diff--->difference)
git log
顯示從最近到最遠的提交日志。如果嫌輸出信息太多,看得眼花繚亂的,可以試試加上--pretty=oneline參數(shù)
git reset --hard HEAD^
回到上一個版本
git reset --hard HEAD^^
回到上上個版本
git reset --hard HEAD~100
回到上100個版本
git reset --hard 791c95aa44cc5540d93a146d6d341e5d38936762
根據(jù)提交的版本號進行版本的回退
git reflog
查看命令歷史,以便確定要回到未來的哪個版本。
git checkout -- readme.txt
命令git checkout -- readme.txt意思就是,把readme.txt文件在工作區(qū)的修改全部撤銷,這里有兩種情況:
一種是readme.txt自修改后還沒有被放到暫存區(qū),現(xiàn)在,撤銷修改就回到和版本庫一模一樣的狀態(tài);
一種是readme.txt已經(jīng)添加到暫存區(qū)后,又作了修改,現(xiàn)在,撤銷修改就回到添加到暫存區(qū)后的狀態(tài)。
總之,就是讓這個文件回到最近一次git commit或git add時的狀態(tài)。
git reset HEAD 文件
例如: git reset HEAD readme.txt
可以把暫存區(qū)的修改撤銷掉(unstage),重新放回工作區(qū)。若要丟棄工作區(qū)的修改,還需要git checkout -- readme.txt
git reset命令既可以回退版本,也可以把暫存區(qū)的修改回退到工作區(qū)。當我們用HEAD時,表示最新的版本。
git remote add origin git@...................
關聯(lián)一個遠程庫
git push
把當前分支推送到遠程
git push -u origin master
當遠程庫是空的,我們第一次推送master分支時,加上了-u參數(shù),Git不但會把本地的master分支內(nèi)容推送的遠程新的master分支,還會把本地的master分支和遠程的master分支關聯(lián)起來,在以后的推送或者拉取時就可以簡化命令。
git clone git@.............
克隆
git branch dev
創(chuàng)建一個名稱叫dev的分支
git checkout dev
當前的分支切換為dev分支
git checkout -b dev
創(chuàng)建一個dev分支,并且切換到dev分支(相當于是是前面兩句命令的合并)
git branch
列出所有分支,當前分支前面會標一個*號
git merge dev
把dev分支的工作成果合并到當前分支上、
git merge命令用于合并指定分支到當前分支
git branch -d dev
刪除dev分支
git branch -D dev
若dev分支還沒合并到所切出來的分支,則git branch -d dev將不能刪除dev分支,可以通過git branch -D dev強行刪除dev分支
git log --graph
查看分支合并圖
git log --graph --pretty=oneline --abbrev-commit
git merge --no-ff -m "備注的信息" dev
將dev分支合并到當前分支的時候強制禁用Fast forward模式
通常,合并分支時,如果可能,Git會用Fast forward模式,但這種模式下,刪除分支后,會丟掉分支信息。
如果要強制禁用Fast forward模式,Git就會在merge時生成一個新的commit,這樣,從分支歷史上就可以看出分支信息。
合并分支時,加上--no-ff
參數(shù)就可以用普通模式合并,合并后的歷史有分支,能看出來曾經(jīng)做過合并,而fast forward
合并就看不出來曾經(jīng)做過合并。
git stash
可用來暫存當前正在進行的工作
git stash list
查看已暫存列表
git stash apply
恢復工作現(xiàn)場,但是恢復后,stash內(nèi)容并不刪除
git stash drop
刪除stash內(nèi)容
git stash pop
恢復的同時把stash內(nèi)容也刪了,相當于前面兩個命令的結(jié)合
git stash apply stash@{0}
恢復指定的stash
git remote
要查看遠程庫的名稱
git remote -v
顯示更詳細的遠程庫信息。顯示可以抓取和推送的origin的地址。如果沒有推送權限,就看不到push的地址
git push origin 本地分支的名稱
把該分支上的所有本地提交推送到遠程庫。推送時,要指定本地分支,這樣,Git就會把該分支推送到遠程庫對應的遠程分支上:
git branch -r
查看遠程分支
git branch -a
查看所有分支(會顯示本地分支和遠程分支)
git fetch
個人粗淺的理解為將遠程所有的分支信息拉取到本地
git checkout -b local-branchname origin/remote_branchname
將遠程分支映射到本地命名為local-branchname 的一分支(本地分支名稱最好和遠程分支名稱一致)
git branch --set-upstream dev origin/dev
指定本地dev分支與遠程origin/dev分支的鏈接
git tag
查看所有標簽
git tag 標簽名稱
打標簽:默認標簽是打在最新提交的commit上的
git tag 標簽名稱 commit的版本號
例如:git tag v0.9 6224937
在制定的提交位置上打上標簽
git show 標簽名稱
查看標簽信息
git tag -a 我是標簽 -m "添加了標簽" 3628164
例如:git tag -a v0.1 -m "version 0.1 released" 3628164
創(chuàng)建帶有說明的標簽,用-a指定標簽名,-m指定說明文字。經(jīng)測試 -a可以去掉,也就可以寫成
git tag 我是標簽 -m "添加了標簽" 3628164
git tag -d v0.1
刪除一個叫做 v0.1的本地標簽
git push origin :refs/tags/<tagname>
刪除一個遠程標簽
git push origin 標簽名稱
推送某個標簽到遠程
git push origin --tags
一次性推送全部尚未推送到遠程的本地標簽