摘要:本篇文章將記錄git常用命令介紹和使用夭委,主要包括clone幅狮、init、add株灸、mv崇摄、reset、rm慌烧、log逐抑、status、branch屹蚊、checkout厕氨、commit、fetch汹粤、pull命斧、push。
clone:克隆一個倉庫到新目錄
從遠程主機克隆一個版本庫嘱兼。
$ gitclone<版本庫的網(wǎng)址>
比如版本庫網(wǎng)址為https://github.com/naffitary/gitstudy.git国葬。
$ gitclonehttps://github.com/naffitary/gitstudy.git
該命令會在本地主機生成一個目錄,與遠程主機的版本庫同名 。
如果要指定不同的目錄名汇四,可以將目錄名作為git clone命令的第二個參數(shù)接奈。
$ git clone<版本庫的網(wǎng)址><本地目錄名>
比如
$ gitclonehttps://github.com/naffitary/gitstudy.git project.git
該命令會在當前目錄下生成project.git 內(nèi)容從版本庫的網(wǎng)址中克隆。
git clone支持多種協(xié)議船殉,除了HTTP(s)以外鲫趁,還支持SSH、Git利虫、本地文件協(xié)議等挨厚。
init:創(chuàng)建一個空的Git倉庫或重新初始化現(xiàn)有的Git倉庫
運用mkdir命令創(chuàng)建一個git目錄
$mkdirproject.git
創(chuàng)建了project.git 目錄,但沒有輸出糠惫。
切換到xxx.git目錄(這里我用的是project)下
$cdproject.git/
切換到project.git目錄下疫剃,沒有輸出。
顯示目標列表硼讽,跟后面產(chǎn)生對比
$ls
沒有輸出巢价。
初始化倉庫
$ git--bare init
輸出Initialized empty Git repository in D:/php相關(guān)/git/Git/project.git/,表示初始化完畢固阁,沒有出錯壤躲。而且project.git 目錄會有bare標志,顯示為project.git (BARE:master)
再次顯示目標列表备燃,跟前面產(chǎn)生對比
$ls
輸出project.git 下的目標列表config description HEAD hooks/ info/ objects/ refs/
add: 添加文件內(nèi)容到索引
git add 碉克, 只將那些創(chuàng)建或修改并且沒有被刪除的文件添加到索引,其中可以是文件并齐,也可以是目錄漏麦。(aa就是我建的一個目錄。)
$gitaddaa
這里我遇到一個問題况褪,正確add任何存在的文件會提示錯誤信息撕贞,其它git所屬命令(除init)也會提示錯誤信息:fatal: This operation must be run in a work tree。通過查找資料和實踐發(fā)現(xiàn)测垛,可能是我創(chuàng)建的是空倉庫的緣故捏膨,在git --bare init之后,先后輸入git init和git remote add origin命令然后git add aa赐纱,就可以正確添加了脊奋。
git add -u ,把中所有跟蹤文件中被修改過或已刪除文件的信息添加到索引庫疙描。 它不會處理沒有跟蹤的文件。
$gitadd-u? aa
git add -A 讶隐,把中所有跟蹤文件中被修改過或已刪除文件和所有未跟蹤的文件信息添加到索引庫起胰。
比如,$git add -A aa
git add -i , 查看中被所有修改過或已刪除文件但沒有提交的文件效五,
并通過其revert子命令可以查看中所有未跟蹤的文件地消,同時進入一個子命令系統(tǒng)。
比如
$gitadd -iaa
git add --all畏妖,添加當前目錄下的所有的目錄和文件脉执。
$ gitadd--all
以上前4點,都可以用.表示路徑path戒劫,表示當前目錄半夷。$git add .,$ git add -u. 迅细,$ git add -A .巫橄,$ git add -i .。
比如 輸入
$ gitadd-i .
輸出以下信息茵典。
staged? ? unstaged path
1:? ? ? ? +1/-0+0/-0gitstudy
*** Commands ***
1:status2: update3:revert4: add untracked
5: patch6:diff7:quit8: help
選擇子命令command(注意:可以輸入序號湘换,也可以輸入命令單詞),命令1是狀態(tài)统阿,顯示路徑上的變化彩倚;命令2是更新,將工作狀態(tài)樹添加到更改組 扶平;命令3是還原帆离,還原更改組到頭版本;命令4是添加未跟蹤蜻直,添加未跟蹤文件的內(nèi)容到更改組盯质;命令5是修補程序即補丁,挑選可行的以及選擇性更新概而;命令6是差異呼巷, 比較單個文件或者目錄內(nèi)容;命令7是退出赎瑰,退出該命令選項王悍;命令8是幫助,顯示其他命令的作用餐曼,幫助使用压储。
mv:移動或重命名文件,目錄或符號鏈接
用$ ls查看當前目錄下的文件和目錄源譬,可以看看準備移動的文件存不存在集惋,為后面操作做準備〔饶铮可以看到當前目錄下有以下文件和目錄11.txt aa/ pro.git/ README.md刮刑。
移動11.txt到aa目錄下:
$ git mv11.txtaa
移動完后,查看一下狀態(tài),看看有沒有移動成功雷绢。
$ git status-s
可以看到狀態(tài)結(jié)果如下:
Aaa/11.txt
?? pro.git/
或者再用$ ls查看當前目錄下的文件和目錄泛烙,可以看到,當前目錄下文件和目錄為aa/ pro.git/ README.md翘紊,aa目錄下多了11.txt蔽氨,也能說明移動成功。
reset: 將當前HEAD復位為指定狀態(tài)
如果發(fā)現(xiàn)錯誤的將不想staging的文件add進入index之后帆疟,想回退取消鹉究,則可以使用如下命令:
gitresetHEAD...
同時git add完畢之后,git也會做相應的提示鸯匹。
git reset[--mode ][或HEAD]
將當前的分支重設(reset)到指定的或者HEAD(如果不顯示指定commit坊饶,默認是HEAD,即最新的一次提交)殴蓬。mode的取值可以是hard匿级、mixed。
gitreset--hard
重設index和working directory染厅,自從以來在working directory中的任何改變都被丟棄痘绎,并把HEAD指向。
gitreset--mixed
僅重設index肖粮,但是不重設working directory孤页。這個模式是默認模式,即當不顯示告知git reset模式時涩馆,會使用mixed模式行施。這個模式的效果是,working directory中文件的修改都會被保留魂那,不會丟棄蛾号,也不會被標記成"Changes to be committed"。
rm:從工作樹和索引中刪除文件
使用格式:
git rm [] [--] ...
-n, --dry-run? ? ? ? ? 干運行
-q, --quiet? ? ? ? ? ? ? 不列出刪除的文件
--cached? ? ? ? ? ? ? ? 只能從索引中刪除
-f, --force? ? ? ? ? ? ? ? 覆蓋最新的檢查
-r? ? ? ? ? ? ? ? ? ? ? ? ? ? 允許遞歸刪除
--ignore-unmatch? ? 退出零狀態(tài)即使沒有匹配
注意:$ git rm文件名 涯雅,必須在跟蹤并提交到倉庫中即add和commit后鲜结,才能刪除。如果是已提交并修改后的文件和目錄活逆,需要用git commit -a -m文件名或git commit -a選擇提交精刷,不然會提示錯誤信息,error: the following file has local modifications:文件在本地被修改了蔗候。直接用git commit -m文件名或git commit選擇提交是無法正常刪除的怒允,因為雖然沒有提示錯誤信息但實際上并沒有commit成功。
log:顯示提交日志
不帶參數(shù)锈遥,會顯示所有的歷史記錄
$gitlog
按時間輸出误算,最近的在最上面仰美,
commit8deb05890c4a3d3a5da0085e8d93fde6a8105076 (HEAD->master, origin/master, origin/HEAD)
Author: naffitary <2219165492@qq.com>
Date:? Wed Jul513:32:372017+0800
Initialcommit
帶參數(shù)-p迷殿,按補丁顯示每個更新間的差異儿礼。
commit8deb05890c4a3d3a5da0085e8d93fde6a8105076 (HEAD->master, origin/master, origin/HEAD)
Author: naffitary <2219165492@qq.com>
Date:? Wed Jul513:32:372017+0800
Initialcommit
diff--git a/README.md b/README.md
newfilemode100644
index0000000..a077ed0
--- /dev/null
+++ b/README.md
@-0,0+1@@
+# gitstudy
\Nonewlineatendoffile
帶參數(shù)--stat,顯示每次更新的修改文件的統(tǒng)計信息庆寺,每個提交都列出了修改過的文件蚊夫,以及其中添加和移除的行數(shù),并在最后列出所有增減行數(shù)小計
$ git status-s
輸出信息沒有-p命令詳細懦尝。
AD aa/gitstudy.git
??11.txt
??? pro.git
status:顯示工作樹狀態(tài)
輸出詳細狀態(tài)信息用$ git status知纷,輸出簡短狀態(tài)信息用$ git status -s。
branch:列表陵霉,創(chuàng)建或刪除分支
git branch命令的-r選項琅轧,可以用來查看遠程分支。
$ gitbranch-r
輸出
origin/master
-a選項查看所有分支踊挠。
$ gitbranch-a
輸出
*master
remotes/origin/master
上面命令表示乍桂,本地主機的當前分支是master,遠程分支是origin/master效床。
checkout:切換分支或恢復工作樹文件
使用git checkout命令創(chuàng)建一個新的分支睹酌。
$ git checkout -bnewBrachorigin/master
上面命令表示,在origin/master的基礎上剩檀,創(chuàng)建一個新分支憋沿。
此外,也可以使用git merge命令或者git rebase命令沪猴,在本地分支上合并遠程分支辐啄。
$ git merge origin/master
或者
$git rebase origin/master
上面命令表示在當前分支上,合并origin/master运嗜。
commit:將更改記錄添加到倉庫中
注意:養(yǎng)成在一開始就輸入以下命令壶辜,來事先設置郵箱和用戶名,以防遠程操作的命令出錯洗出。
$ gitconfig--global user.email “2219165492@qq.com”
$ gitconfig--global user.name “naffitary”
$git commit? -m"提交的描述信息"
如果我們這里不用-m參數(shù)的話士复,即$ git commit;git將調(diào)到一個文本編譯器(通常是vim)來讓你輸入提交的描述信息翩活,前面有#將會被無視阱洪,若想被commit去掉前面的#并ZZ或:wq保存并退出,git commit -a也是如此菠镇。
$ git commit -a-m"提交的描述信息"
git commit命令的-a選項可只將所有被修改或者已刪除的且已經(jīng)被git管理的文檔提交到倉庫中冗荸。如果只是修改或者刪除了已被Git管理的文檔,是沒必要使用git add命令的利耍。
git add .命令除了能夠判斷出當前目錄(包括其子目錄)所有被修改或者已刪除的文檔蚌本,還能判斷用戶所添加的新文檔盔粹,并將其信息追加到索引中。
$ gitcommit--amend
對于已經(jīng)修改提交過的注釋程癌,如果需要修改舷嗡,可以借助git commit --amend來進行。
fetch:從另一個存儲庫下載對象和引用
將遠程主機的版本庫的更新(Git術(shù)語叫做commit)取回本地嵌莉。默認情況下进萄,git fetch取回所有分支(branch)的更新。
$ git fetch<遠程主機名>
比如锐峭,
$git fetch origin
如果只想取回特定分支的更新中鼠,可以指定分支名。
$ git fetch<遠程主機名><分支名>
比如沿癞,
$ git fetch originmaster
pull:從另一個存儲庫或本地分支中拉取并集成
取回遠程主機某個分支的更新援雇,再與本地的指定分支合并。
$ git pull<遠程主機名><遠程分支名>:<本地分支名>
比如椎扬,取回origin主機的next分支惫搏,與本地的master分支合并:
$ git pull originnext:master
如果遠程分支是與當前分支合并,則冒號后面的部分可以省略盗舰。
$git pull originnext
上面命令表示晶府,取回origin/next分支,再與當前分支合并钻趋。實質(zhì)上川陆,這等同于先做git fetch,再做git merge蛮位。
$git fetch origin
$git merge origin/next
如果當前分支與遠程分支存在追蹤關(guān)系较沪,git pull就可以省略遠程分支名。
$git pull origin
上面命令表示失仁,本地的當前分支自動與對應的origin主機”追蹤分支”進行合并尸曼。
如果當前分支只有一個追蹤分支,連遠程主機名都可以省略萄焦。
$git pull
上面命令表示控轿,當前分支自動與唯一一個追蹤分支進行合并。
push:推送更新遠程引用以及關(guān)聯(lián)的對象
將本地分支的更新拂封,推送到遠程主機茬射。
$ git push<遠程主機名><本地分支名>:<遠程分支名>
注意,分支推送順序的寫法是<來源地>:<目的地>冒签,所以git pull是<遠程分支>:<本地分支>在抛,而git push是<本地分支>:<遠程分支>。
如果省略遠程分支名萧恕,則表示將本地分支推送與之存在”追蹤關(guān)系”的遠程分支(通常兩者同名)刚梭,如果該遠程分支不存在肠阱,則會被新建。
$ gitpushoriginmaster
上面命令表示朴读,將本地的master分支推送到origin主機的master分支屹徘。如果后者不存在,則會被新建磨德。
如果省略本地分支名缘回,則表示刪除指定的遠程分支,因為這等同于推送一個空的本地分支到遠程分支典挑。
$ gitpushorigin:master
等同于
$ gitpushorigin--deletemaster
上面命令表示刪除origin主機的master分支。
如果當前分支與遠程分支之間存在追蹤關(guān)系啦吧,則本地分支和遠程分支都可以省略您觉。
$ gitpushorigin
上面命令表示,將當前分支推送到origin主機的對應分支授滓。
如果當前分支只有一個追蹤分支琳水,那么主機名都可以省略。
$ gitpush
如果當前分支與多個主機存在追蹤關(guān)系般堆,則可以使用-u選項指定一個默認主機在孝,這樣后面就可以不加任何參數(shù)使用git push。
$ gitpush-uoriginmaster
上面命令將本地的master分支推送到origin主機淮摔,同時指定origin為默認主機私沮,后面就可以不加任何參數(shù)使用git push了。不帶任何參數(shù)的git push和橙,默認只推送當前分支仔燕,這叫做simple方式。此外魔招,還有一種matching方式晰搀,會推送所有對應的遠程分支的本地分支。如果要修改這個設置办斑,可以采用git config命令外恕。
$ gitconfig--global push.defaultmatching
或者
$ gitconfig--global push.defaultsimple
還有一種情況,就是不管是否存在對應的遠程分支乡翅,將本地的所有分支都推送到遠程主機鳞疲,這時需要使用–all選項。
$git push --allorigin
上面命令表示峦朗,將所有本地分支都推送到origin主機建丧。