1.git init:git init命令創(chuàng)建一個(gè)新的Git倉(cāng)庫(kù)。它用來將已存在但還沒有版本控制的項(xiàng)目轉(zhuǎn)換成一個(gè)Git倉(cāng)庫(kù),或者創(chuàng)建一個(gè)空的新倉(cāng)庫(kù)。
git init
將當(dāng)前的目錄轉(zhuǎn)換成一個(gè)Git倉(cāng)庫(kù)。它在當(dāng)前的目錄下增加了一個(gè).git文件夾,于是就可以開始記錄項(xiàng)目版本了。
git init
在指定目錄創(chuàng)建一個(gè)空的Git倉(cāng)庫(kù)。運(yùn)行這個(gè)命令會(huì)創(chuàng)建一個(gè)名為directory,只包含.git子目錄的空文件夾。
git init --bare
初始化一個(gè)裸的Git倉(cāng)庫(kù),但是忽略工作目錄。共享的倉(cāng)庫(kù)應(yīng)該總是用--bare標(biāo)記創(chuàng)建(見下面的討論)。一般來說,用—bare標(biāo)記初始化的倉(cāng)庫(kù)以.git結(jié)尾。比如,一個(gè)叫my-project的倉(cāng)庫(kù),它的空版本應(yīng)該保存在my-project.git目錄下。
2.git clone:git clone命令拷貝整個(gè)Git倉(cāng)庫(kù)。這個(gè)命令就像svn checkout一樣,除了”工作副本“是一個(gè)完備的Git倉(cāng)庫(kù)——它包含自己的歷史,管理自己的文件,以及環(huán)境和原倉(cāng)庫(kù)完全隔離。
git clone
將位于的倉(cāng)庫(kù)克隆到本地機(jī)器。原倉(cāng)庫(kù)可以在本地文件系統(tǒng)中,或是通過HTTP或SSH連接的遠(yuǎn)程機(jī)器。
例子:(1)git clone ssh://john@example.com/path/to/my-project.git
? ? ? ? ? ? (2)?git clone ssh://git@172.16.33.3:9422/home/gitrepo/ios.git
? ? ? ? ? (3)git clone git@192.168.45.4:/home/gitrepo/w3cschoolcc.git
? ? ? ? ? (4)git clone?https://github.com/wsswdl/wsswdl.github.com.git
3.git config:git config命令允許你在命令行中配置你的Git安裝(或是一個(gè)獨(dú)立倉(cāng)庫(kù))。這個(gè)命令定義了所有配置,從用戶信息到倉(cāng)庫(kù)行為等等。
4.git add:git add命令將工作目錄中的變化添加到緩存區(qū)。它告訴Git你想要在下一次提交時(shí)包含這個(gè)文件的更新。但是,git add不會(huì)怎么影響你的倉(cāng)庫(kù)——在你運(yùn)行g(shù)it commit前更改都不會(huì)被記錄。
5.git commit:git commit命令將緩存的快照提交到項(xiàng)目歷史。
git commit --amend
合并緩存的修改和上一次的提交,用新的快照替換上一個(gè)提交。緩存區(qū)沒有文件時(shí)運(yùn)行這個(gè)命令可以用來編輯上次提交的提交信息,而不會(huì)更改快照。
6.git status:git status命令顯示工作目錄和緩存區(qū)的狀態(tài)。你可以看到哪些更改被緩存了,哪些還沒有,以及哪些還未被Git追蹤。status的輸出?不會(huì)?告訴你任何已提交到項(xiàng)目歷史的信息。如果你想看的話,應(yīng)該使用git log命令。
7.git log:git log?命令顯示已提交的快照。你可以列出項(xiàng)目歷史,篩選,以及搜索特定更改。git status?允許你查看工作目錄和緩存區(qū),而git log只作用于提交的項(xiàng)目歷史。
git log
使用默認(rèn)格式顯示完整地項(xiàng)目歷史。如果輸出超過一屏,你可以用空格鍵來滾動(dòng),按q退出。
git log -n
用限制提交的數(shù)量。比如git log -n 3只會(huì)顯示3個(gè)提交。
git log --oneline
將每個(gè)提交壓縮到一行。當(dāng)你需要查看項(xiàng)目歷史的上層情況時(shí)這會(huì)很有用。
git log --stat
除了git log信息之外,包含哪些文件被更改了,以及每個(gè)文件相對(duì)的增刪行數(shù)。
git log -p
顯示代表每個(gè)提交的一堆信息。顯示每個(gè)提交全部的差異(diff),這也是項(xiàng)目歷史中最詳細(xì)的視圖。
8.git checkout:切換分支。
9.git revert:git revert命令用來撤銷一個(gè)已經(jīng)提交的快照。它是通過搞清楚如何撤銷這個(gè)提交引入的更改,然后在最后加上一個(gè)撤銷了更改的?新?提交,而不是從項(xiàng)目歷史中移除這個(gè)提交。這避免了Git丟失項(xiàng)目歷史,這一點(diǎn)對(duì)于你的版本歷史和協(xié)作的可靠性來說是很重要的。
git revert
生成一個(gè)撤消了引入的修改的新提交,然后應(yīng)用到當(dāng)前分支。
10.git reset:
git reset
從緩存區(qū)移除特定文件,但不改變工作目錄。它會(huì)取消這個(gè)文件的緩存,而不覆蓋任何更改。
git reset
重設(shè)緩沖區(qū),匹配最近的一次提交,但工作目錄不變。它會(huì)取消所有文件的緩存,而不會(huì)覆蓋任何修改,給你了一個(gè)重設(shè)緩存快照的機(jī)會(huì)。
撤銷(revert)和重設(shè)(reset)對(duì)比
撤銷和重設(shè)相比有兩個(gè)重要的優(yōu)點(diǎn)。首先,它不會(huì)改變項(xiàng)目歷史,對(duì)那些已經(jīng)發(fā)布到共享倉(cāng)庫(kù)的提交來說這是一個(gè)安全的操作。至于為什么改變共享的歷史是危險(xiǎn)的,請(qǐng)參閱git reset一節(jié)。
其次,git revert可以針對(duì)歷史中任何一個(gè)提交,而git reset只能從當(dāng)前提交向前回溯。比如,你想用git reset重設(shè)一個(gè)舊的提交,你不得不移除那個(gè)提交后的所有提交,再移除那個(gè)提交,然后重新提交后面的所有提交。不用說,這并不是一個(gè)優(yōu)雅的回滾方案。
11.git clean:git clean命令將未跟蹤的文件從你的工作目錄中移除。
12.git rebase:是將分支移到一個(gè)新的基提交的過程。從內(nèi)容的角度來看,rebase只不過是將分支從一個(gè)提交移到了另一個(gè)。但從內(nèi)部機(jī)制來看,Git是通過在選定的基上創(chuàng)建新提交來完成這件事的——它事實(shí)上重寫了你的項(xiàng)目歷史。理解這一點(diǎn)很重要,盡管分支看上去是一樣的,但它包含了全新的提交。
13.git merge:分支合并
將master分支合并到feature分支最簡(jiǎn)單的辦法就是用下面這些命令:
git?checkout?feature
git?merge?master
14.git remote:git remote命令允許你創(chuàng)建、查看和刪除和其它倉(cāng)庫(kù)之間的連接。遠(yuǎn)程連接更像是書簽,而不是直接跳轉(zhuǎn)到其他倉(cāng)庫(kù)的鏈接。它用方便記住的別名引用不那么方便記住的URL,而不是提供其他倉(cāng)庫(kù)的實(shí)時(shí)連接。
git remote
列出你和其他倉(cāng)庫(kù)之間的遠(yuǎn)程連接。
git remote add
創(chuàng)建一個(gè)新的遠(yuǎn)程倉(cāng)庫(kù)連接。在添加之后,你可以將作為便捷的別名在其他Git命令中使用。
git remote rm
移除名為的遠(yuǎn)程倉(cāng)庫(kù)的連接。
git remote rename
將遠(yuǎn)程連接從重命名為。
15.git fetch:git fetch命令將提交從遠(yuǎn)程倉(cāng)庫(kù)導(dǎo)入到你的本地倉(cāng)庫(kù)。拉取下來的提交儲(chǔ)存為遠(yuǎn)程分支,而不是我們一直使用的普通的本地分支。你因此可以在整合進(jìn)你的項(xiàng)目副本之前查看更改。
16.git pull:在基于Git的協(xié)作工作流中,將上游更改合并到你的本地倉(cāng)庫(kù)是一個(gè)常見的工作。我們已經(jīng)知道應(yīng)該使用git fetch,然后是git merge,但是git pull將這兩個(gè)命令合二為一。
17.git push:Push是你將本地倉(cāng)庫(kù)中的提交轉(zhuǎn)移到遠(yuǎn)程倉(cāng)庫(kù)中時(shí)要做的事。它和git fetch正好相反,fetch將提交導(dǎo)入到本地分支,而push將提交導(dǎo)出到遠(yuǎn)程分支。它可以覆蓋已有的更改,所以你需要小心使用。
18.git branch:
列出分支:git branch
刪除分支:git branch - d