Linux GIT命令大全
Linux的性能、可靠性、靈活性、和開(kāi)放性,與其支持多微處理器體系結(jié)構(gòu)、硬件設(shè)備、圖形支持和通信協(xié)議相結(jié)合,把Linux建成了一個(gè)日益發(fā)展的操作系統(tǒng)平臺(tái)。接下來(lái)是小編為大家收集的Linux GIT命令大全,希望能幫到大家。
Linux GIT命令大全
語(yǔ) 法:Git 命令
補(bǔ)充說(shuō)明:git命令是用來(lái)管理文件的程序,它十分類似DOS下的Norton Commander,具有互動(dòng)式操作界面。它的操作方法和Norton Commander幾乎一樣,略訴如下:
F1 :執(zhí)行info指令,查詢指令相關(guān)信息,會(huì)要求您輸入欲查詢的名稱。
F2 :執(zhí)行cat指令,列出文件內(nèi)容。
F3 :執(zhí)行g(shù)itview指令,觀看文件內(nèi)容。
F4 :執(zhí)行vi指令,編輯文件內(nèi)容。
F5 :執(zhí)行cp指令,復(fù)制文件或目錄,會(huì)要求您輸入目標(biāo)文件或目錄。
F6 :執(zhí)行mv指令,移動(dòng)文件或目錄,或是更改其名稱,會(huì)要求您輸入目標(biāo)文件或目錄。
F7 :執(zhí)行mkdir指令,建立目錄。
F8 :執(zhí)行rm指令,刪除文件或目錄。
F9 :執(zhí)行make指令,批處理執(zhí)行指令或編譯程序時(shí),會(huì)要求您輸入相關(guān)命令。
F10 :離開(kāi)git文件管理員。
----------------- Git命令具體使用-------------------------------
Git是一個(gè)分布式的版本控制工具,本篇文章從介紹Git開(kāi)始,重點(diǎn)在于介紹Git的基本命令和使用技巧,讓你嘗試使用Git的同時(shí),體驗(yàn)到原來(lái)一個(gè)版本控制工具可以對(duì)開(kāi)發(fā)產(chǎn)生如此之多的影響,文章分為兩部分,第一部分介紹Git的一些常用命令,其中穿插介紹Git的基本概念和原理,第二篇重點(diǎn)介紹Git的使用技巧,最后會(huì)在Git Hub上創(chuàng)建一個(gè)開(kāi)源項(xiàng)目開(kāi)啟你的Git實(shí)戰(zhàn)之旅
Git是什么
Git在Wikipedia上的定義:它是一個(gè)免費(fèi)的、分布式的版本控制工具,或是一個(gè)強(qiáng)調(diào)了速度快的源代碼管理工具。Git最初被Linus Torvalds開(kāi)發(fā)出來(lái)用于管理Linux內(nèi)核的開(kāi)發(fā)。每一個(gè)Git的工作目錄都是一個(gè)完全獨(dú)立的代碼庫(kù),并擁有完整的歷史記錄和版本追蹤能力,不依賴于網(wǎng)絡(luò)和中心服務(wù)器。
Git的出現(xiàn)減輕了許多開(kāi)發(fā)者和開(kāi)源項(xiàng)目對(duì)于管理分支代碼的壓力,由于對(duì)分支的良好控制,更鼓勵(lì)開(kāi)發(fā)者對(duì)自己感興趣的項(xiàng)目做出貢獻(xiàn)。其實(shí)許多開(kāi)源項(xiàng)目包括Linux kernel, Samba, X.org Server, Ruby on Rails,都已經(jīng)過(guò)渡到使用Git作為自己的版本控制工具。對(duì)于我們這些喜歡寫(xiě)代碼的開(kāi)發(fā)者嘛,有兩點(diǎn)最大的好處,我們可以在任何地點(diǎn)(在上班的地鐵上)提交自己的代碼和查看代碼版本;我們可以開(kāi)許許多多個(gè)分支來(lái)實(shí)踐我們的想法,而合并這些分支的開(kāi)銷幾乎可以忽略不計(jì)。
Git 1+1
現(xiàn)在進(jìn)入本篇文章真正的主題,介紹一下Git的基本命令和操作,會(huì)從Git的版本庫(kù)的初始化,基本操作和獨(dú)有的常用命令三部分著手,讓大家能夠開(kāi)始使用Git。
Git通常有兩種方式來(lái)進(jìn)行初始化:
git clone: 這是較為簡(jiǎn)單的一種初始化方式,當(dāng)你已經(jīng)有一個(gè)遠(yuǎn)程的Git版本庫(kù),只需要在本地克隆一份,例如'git clone git://github.com/someone/some_project.git some_project'命令就是將'git://github.com/someone/some_project.git'這個(gè)URL地址的遠(yuǎn)程版 本庫(kù)完全克隆到本地some_project目錄下面
git init和git remote:這種方式稍微復(fù)雜一些,當(dāng)你本地創(chuàng)建了一個(gè)工作目錄,你可以進(jìn)入這個(gè)目錄,使用'git init'命令進(jìn)行初始化,Git以后就會(huì)對(duì)該目錄下的文件進(jìn)行版本控制,這時(shí)候如果你需要將它放到遠(yuǎn)程服務(wù)器上,可以在遠(yuǎn)程服務(wù)器上創(chuàng)建一個(gè)目錄,并把 可訪問(wèn)的URL記錄下來(lái),此時(shí)你就可以利用'git remote add'命令來(lái)增加一個(gè)遠(yuǎn)程服務(wù)器端,例如'git remote add origin git://github.com/someone/another_project.git'這條命令就會(huì)增加URL地址為'git: //github.com/someone/another_project.git',名稱為origin的遠(yuǎn)程服務(wù)器,以后提交代碼的時(shí)候只需要使用 origin別名即可
現(xiàn)在我們有了本地和遠(yuǎn)程的版本庫(kù),讓我們來(lái)試著用用Git的基本命令吧:
git pull:從其他的版本庫(kù)(既可以是遠(yuǎn)程的也可以是本地的)將代碼更新到本地,例如:'git pull origin master'就是將origin這個(gè)版本庫(kù)的代碼更新到本地的master主枝,該功能類似于SVN的update
git add:是將當(dāng)前更改或者新增的文件加入到Git的索引中,加入到Git的索引中就表示記入了版本歷史中,這也是提交之前所需要執(zhí)行的一步,例如'git add app/model/user.rb'就會(huì)增加app/model/user.rb文件到Git的索引中
git rm:從當(dāng)前的工作空間中和索引中刪除文件,例如'git rm app/model/user.rb'
git commit:提交當(dāng)前工作空間的修改內(nèi)容,類似于SVN的commit命令,例如'git commit -m story #3, add user model',提交的時(shí)候必須用-m來(lái)輸入一條提交信息
git push:將本地commit的代碼更新到遠(yuǎn)程版本庫(kù)中,例如'git push origin'就會(huì)將本地的代碼更新到名為orgin的遠(yuǎn)程版本庫(kù)中
git log:查看歷史日志
git revert:還原一個(gè)版本的修改,必須提供一個(gè)具體的Git版本號(hào),例如'git revert bbaf6fb5060b4875b18ff9ff637ce118256d6f20',Git的版本號(hào)都是生成的一個(gè)哈希值
上面的命令幾乎都是每個(gè)版本控制工具所公有的,下面就開(kāi)始嘗試一下Git獨(dú)有的一些命令:
git branch:對(duì)分支的增、刪、查等操作,例如'git branch new_branch'會(huì)從當(dāng)前的工作版本創(chuàng)建一個(gè)叫做new_branch的新分支,'git branch -D new_branch'就會(huì)強(qiáng)制刪除叫做new_branch的分支,'git branch'就會(huì)列出本地所有的分支
git checkout:Git的checkout有兩個(gè)作用,其一是在不同的branch之間進(jìn)行切換,例如'git checkout new_branch'就會(huì)切換到new_branch的分支上去;另一個(gè)功能是還原代碼的作用,例如'git checkout app/model/user.rb'就會(huì)將user.rb文件從上一個(gè)已提交的版本中更新回來(lái),未提交的內(nèi)容全部會(huì)回滾
git rebase:用下面兩幅圖解釋會(huì)比較清楚一些,rebase命令執(zhí)行后,實(shí)際上是將分支點(diǎn)從C移到了G,這樣分支也就具有了從C到G的功能
git reset:將當(dāng)前的工作目錄完全回滾到指定的版本號(hào),假設(shè)如下圖,我們有A-G五次提交的版本,其中C的版本號(hào)是 bbaf6fb5060b4875b18ff9ff637ce118256d6f20,我們執(zhí)行了'git reset bbaf6fb5060b4875b18ff9ff637ce118256d6f20'那么結(jié)果就只剩下了A-C三個(gè)提交的版本
git stash:將當(dāng)前未提交的工作存入Git工作棧中,時(shí)機(jī)成熟的時(shí)候再應(yīng)用回來(lái),這里暫時(shí)提一下這個(gè)命令的用法,后面在技巧篇會(huì)重點(diǎn)講解
git config:利用這個(gè)命令可以新增、更改Git的各種設(shè)置,例如'git config branch.master.remote origin'就將master的遠(yuǎn)程版本庫(kù)設(shè)置為別名叫做origin版本庫(kù),后面在技巧篇會(huì)利用這個(gè)命令個(gè)性化設(shè)置你的Git,為你打造獨(dú)一無(wú)二的 Git
git tag:可以將某個(gè)具體的版本打上一個(gè)標(biāo)簽,這樣你就不需要記憶復(fù)雜的版本號(hào)哈希值了,例如你可以使用'git tag revert_version bbaf6fb5060b4875b18ff9ff637ce118256d6f20'來(lái)標(biāo)記這個(gè)被你還原的版本,那么以后你想查看該版本時(shí),就可以使用 revert_version標(biāo)簽名,而不是哈希值了
Git之所以能夠提供方便的本地分支等特性,是與它的文件存儲(chǔ)機(jī)制有關(guān)的。Git存儲(chǔ)版本控制信息時(shí)使用它自己定義的一套文件系統(tǒng)存儲(chǔ)機(jī)制,在代碼根目錄下有一個(gè).git文件夾,會(huì)有如下這樣的目錄結(jié)構(gòu):
有幾個(gè)比較重要的文件和目錄需要解釋一下:HEAD文件存放根節(jié)點(diǎn)的信息,其實(shí)目錄結(jié)構(gòu)就表示一個(gè)樹(shù)型結(jié)構(gòu),Git采用這種樹(shù)形結(jié)構(gòu)來(lái)存儲(chǔ)版本信息,那么HEAD就表示根;refs目錄存儲(chǔ)了你在當(dāng)前版本控制目錄下的各種不同引用(引用指的是你本地和遠(yuǎn)程所用到的各個(gè)樹(shù)分支的信息),它有heads、remotes、stash、tags四個(gè)子目錄,分別存儲(chǔ)對(duì)不同的根、遠(yuǎn)程版本庫(kù)、Git棧和標(biāo)簽的四種引用,你可以通過(guò)命令'git show-ref'更清晰地查看引用信息;logs目錄根據(jù)不同的引用存儲(chǔ)了日志信息。因此,Git只需要代碼根目錄下的這一個(gè).git目錄就可以記錄完整的版本控制信息,而不是像SVN那樣根目錄和子目錄下都有.svn目錄。那么下面就來(lái)看一下Git與SVN的區(qū)別吧
Git與SVN的不同
SVN(Subversion)是當(dāng)前使用最多的版本控制工具。與它相比較,Git最大的優(yōu)勢(shì)在于兩點(diǎn):易于本地增加分支和分布式的特性。
下面兩幅圖可以形象的展示Git與SVN的不同之處
對(duì)于易于本地增加分支,圖中Git本地和服務(wù)器端結(jié)構(gòu)都很靈活,所有版本都存儲(chǔ)在一個(gè)目錄中,你只需要進(jìn)行分支的切換即可達(dá)到在某個(gè)分支工作的效果。而SVN則完全不同,如果你需要在本地試驗(yàn)一些自己的代碼,只能本地維護(hù)多個(gè)不同的拷貝,每個(gè)拷貝對(duì)應(yīng)一個(gè)SVN服務(wù)器地址。舉一個(gè)實(shí)際的例子,以前我所在的小組使用SVN作為版本控制工具,當(dāng)我正在試圖增強(qiáng)一個(gè)模塊,工作做到一半,由于會(huì)改變?cè)K的行為導(dǎo)致代碼服務(wù)器上許多測(cè)試的失敗,所以并沒(méi)有提交代碼。這時(shí)候上級(jí)對(duì)我說(shuō),現(xiàn)在有一個(gè)很緊急的Bug需要處理, 必須在兩個(gè)小時(shí)內(nèi)完成。我只好將本地的所有修改diff,并輸出成為一個(gè)patch文件,然后回滾有關(guān)當(dāng)前任務(wù)的所有代碼,再開(kāi)始修改Bug的任務(wù),等到修改好后,在將patch應(yīng)用回來(lái)。前前后后要完成多個(gè)繁瑣的步驟,這還不計(jì)中間代碼發(fā)生沖突所要進(jìn)行的工作量??墒侨绻褂肎it, 我們只需要開(kāi)一個(gè)分支或者轉(zhuǎn)回到主分支上,就可以隨時(shí)開(kāi)始Bug修改的任務(wù),完成之后,只要切換到原來(lái)的分支就可以優(yōu)雅的繼續(xù)以前的任務(wù)。只要你愿意,每一個(gè)新的任務(wù)都可以開(kāi)一個(gè)分支,完成后,再將它合并到主分支上,輕松而優(yōu)雅。
分布式對(duì)于Git而言,你可以本地提交代碼,所以在上面的圖中,Git有利于將一個(gè)大任務(wù)分解,進(jìn)行本地的多次提交,而SVN只能在本地進(jìn)行大量的一次性更改,導(dǎo)致將來(lái)合并到主干上造成巨大的風(fēng)險(xiǎn)。Git的代碼日志是在本地的,可以隨時(shí)查看。SVN的日志在服務(wù)器上的,每次查看日志需要先從服務(wù)器上下載下來(lái)。我工作的小組,代碼服務(wù)器在美國(guó),每次查看小組幾年前所做的工作時(shí),日志下載就需要十分鐘,這不能不說(shuō)是一個(gè)痛苦。后來(lái)我們遷移到Git上,利用Git日志在本地的特性,我用Ruby編寫(xiě)了一個(gè)Rake腳本,可以查看某個(gè)具體任務(wù)的所有代碼歷史,每次只需要幾秒鐘,大大方便我的工作。當(dāng)然分布式并不是說(shuō)用了Git就不需要一個(gè)代碼中心服務(wù)器,如果你工作在一個(gè)團(tuán)隊(duì)里,還是需要一個(gè)服務(wù)器來(lái)保存所有的代碼的。
看了“Linux GIT命令大全”還想看:
Linux GIT命令大全
上一篇:Linux下安裝Git教程
下一篇:在Eclipse中使用Git教程