1.git init 當(dāng)前文件變成git存儲(chǔ)庫也叫版本庫。
2.git status 查看當(dāng)前版本庫的狀態(tài)
3.git diff 查看現(xiàn)在和之前有何不同
4.git add? 相當(dāng)于把你要提交的文件提交到版本庫的暫存區(qū)。
5.git commit? -m "添加文件的說明"? 提交文件到git版本庫中。每提交一次相當(dāng)于創(chuàng)建了一個(gè)版本庫! -m表示對(duì)你提交內(nèi)容的說明
6.git log? 命令顯示從當(dāng)前時(shí)間點(diǎn)最近到最遠(yuǎn)的提交日志
7.git log --pretty=oneline? 以單線圖的形式顯示。顯示的內(nèi)容清晰,簡(jiǎn)單明了。
8.git reset --hart? ?Head^? 回退到上一個(gè)版本。 Head~10 回退到前10個(gè)版本。hrad 后也可跟版本號(hào)。
9.git reflog 顯示歷史版本操作記錄,記錄版本及版本指向操作
10.工作區(qū)、暫存區(qū)、版本庫 如圖

11.管理修改:
先將工作區(qū)的修改都添加到暫存區(qū),然后進(jìn)行提交。git add file? git commit? -m"修改的說明".
12.撤銷修改
(1).在你還沒有將修改添加到暫存區(qū)的時(shí)候撤銷。使用命令? git checkout -- file
(2).在你將修改添加到暫存區(qū)還沒有提交的時(shí)候撤銷。使用命令 git reset HEAD file 。會(huì)將文件從暫存區(qū)放回到工作區(qū)。在使用 命令 git checkout -- file 。就會(huì)丟棄修改。
(3).現(xiàn)在,假設(shè)你不但改錯(cuò)了東西,還從暫存區(qū)提交到了版本庫,怎么辦呢?還記得版本回退一節(jié)嗎?可以回退到上一個(gè)版本。不過,這是有條件的,就是你還沒有把自己的本地版本庫推送到遠(yuǎn)程。還記得Git是分布式版本控制系統(tǒng)嗎?我們后面會(huì)講到遠(yuǎn)程版本庫,一旦你把“stupid boss”提交推送到遠(yuǎn)程版本庫,你就真的慘了……
13.? ? 刪除文件
? ? 刪除文件? 使用命令: rm file??
? ? ?現(xiàn)在有兩種情況:
? ? ? ? (1).完全確定自己要?jiǎng)h除? 使用命令 git rm file;git commit -m "delete file"
? ? ? ? (2).刪除錯(cuò)誤想要恢復(fù)到以前,使用命令? git checkout -- file;命令的意思是從版本庫將文件恢復(fù)到工作區(qū)
14. GitHub中示例遠(yuǎn)程操作(在有本地庫的情況下)
? ? ? ? (1)本地添加一個(gè)版本庫,GitHub中添加一個(gè)遠(yuǎn)程庫learnGit
????????(2)將遠(yuǎn)程庫與本地庫關(guān)聯(lián)起來。 命令如下:
? ? ? ? ? ? ? ? ? ? git remote add origin?git@github.com:zxyjuese/learngit.git 其中origin為遠(yuǎn)程庫的名稱,git@github.com:zxyjuese/learngit.git為遠(yuǎn)程庫 ????????????????????????????????????????的地址;
????????(3)將本地庫推送到遠(yuǎn)程庫。命令如下:
? ? ? ? ? ? ? ? ? ? git push -u origin master? ?
? ??????????????把本地庫的內(nèi)容推送到遠(yuǎn)程,用git push命令,實(shí)際上是把當(dāng)前分支master推送到遠(yuǎn)程。
? ? ? ? ? ? ? ? 由于遠(yuǎn)程庫是空的,我們第一次推送master分支時(shí),加上了-u參數(shù),Git不但會(huì)把本地的master分支內(nèi)容推送的遠(yuǎn)程新的master分支,? ? ? ? ? ? ? ? ? ? 還會(huì)把本地的master分支和遠(yuǎn)程的master分支關(guān)聯(lián)起來,在以后的推送或者拉取時(shí)就可以簡(jiǎn)化命令
????????????小結(jié)
????????????????要關(guān)聯(lián)一個(gè)遠(yuǎn)程庫,使用命令git remote add origin git@server-name:path/repo-name.git;
????????????????關(guān)聯(lián)后,使用命令git push -u origin master第一次推送master分支的所有內(nèi)容;
????????????????此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改;
15.GitHub中示例遠(yuǎn)程操作(在沒有本地庫的情況下)
? ? ? ? ? ? (1)首先,登陸GitHub,創(chuàng)建一個(gè)新的倉庫,名字叫g(shù)itskills:
? ? ? ? ? ? (2)通過命令將遠(yuǎn)程庫克隆到本地 命令如下:
? ? ? ? ? ? ? ? ? ?git clone git@github.com:zxyjuese/gitest.git
? ? ? ? ? ? ? ? ? ?小結(jié):
????????????????????????要克隆一個(gè)倉庫,首先必須知道倉庫的地址,然后使用git clone命令克隆。
????????????????????????Git支持多種協(xié)議,包括https,但通過ssh支持的原生git協(xié)議速度最快。
16.git分支命令
? ? ? ? (1).git checkout -b? dev? ? ? ?創(chuàng)建并且換至dev分支
????????(2).git checkout dev? ? ? ? ? ? 切換分支
????????(3)git branch? ? ? ? ? ? ? ? ? ? ? ?查看分支
????????(4)git merge dev? ? ? ? ? ? ? ? ?合并 dev分支到當(dāng)前分支,可能會(huì)出現(xiàn)Fast-forward字段,說明當(dāng)前是快進(jìn)合并,直接將master指向dev
? ? ? ? (5)git branch -d dev? ? ? ? ? ? ?刪除分支
? ? ? ? (6)git branch dev? ? ? ? ? ? ? ? ?創(chuàng)建分支dev
? ? ? ? (7)合并分支沖突后通過命令?git log --graph命令可以看到分支合并圖。簡(jiǎn)化分支合并圖命令? git log --graph --pretty=oneline --abbrev-commit
? ? ? ? (8)?分支管理策略 通常,合并分支時(shí),如果可能,Git會(huì)用Fast forward模式,但這種模式下,刪除分支后,會(huì)丟掉分支信息。如果要強(qiáng)制禁? ? ? ? ? ? ? ? ????用 Fast forward模式,Git就會(huì)在merge時(shí)生成一個(gè)新的commit,這樣,從分支歷史上就可以看出分支信息。
? ? ? ? ? ? ? ? 禁止使用Fast forward 的命令 git merge --no-ff -m"merge with no-ff"dev
? ? ? ? ?分支策略
????????????????在實(shí)際開發(fā)中,我們應(yīng)該按照幾個(gè)基本原則進(jìn)行分支管理:
? ? ? ? ? ? ? ? 首先,master分支應(yīng)該是非常穩(wěn)定的,也就是僅用來發(fā)布新版本,平時(shí)不能在上面干活;
? ? ? ? ? ? ? ? 那在哪干活呢?干活都在dev分支上,也就是說,dev分支是不穩(wěn)定的,到某個(gè)時(shí)候,比如1.0版本發(fā)布時(shí),再把dev分支合并到master? ? ? ? ? ? ? ? ? ? 上,在master分支發(fā)布1.0版本;
????????????????你和你的小伙伴們每個(gè)人都在dev分支上干活,每個(gè)人都有自己的分支,時(shí)不時(shí)地往dev分支上合并就可以了。
????????????????所以,團(tuán)隊(duì)合作的分支看起來就像這樣:
? ? ? ? ? ? ? ?Git分支十分強(qiáng)大,在團(tuán)隊(duì)開發(fā)中應(yīng)該充分應(yīng)用。
? ? ? ? ? ? ? ? 合并分支時(shí),加上--no-ff參數(shù)就可以用普通模式合并,合并后的歷史有分支,能看出來曾經(jīng)做過合并,而fast forward合并就看不出來曾? ? ? ? ? ? ? ? ? 經(jīng)做過合并。
? ? ? ? 18.關(guān)于隱藏當(dāng)前的添加,適用于你現(xiàn)在工作完成了一半,又不想提交,但又想貼換到其他分支干別的事。這時(shí)候就需要用到隱藏命令:
? ? ? ? ? ? ? ? ? ? git stash? 隱藏當(dāng)前添加到暫存區(qū)的文件,并保證你切換分支后這個(gè)文件不會(huì)在本地出現(xiàn)。
? ? ? ? ? ? ? ? ? ? 接下來你就可以為所欲為的干你想做的事,比如修復(fù)bug。。 任務(wù)完成后,你可以將分支切回去,然后使用命令:
? ? ? ? ? ? ? ? ? ? git stash apply 將隱藏的文件顯示出來,這個(gè)命令不會(huì)將git stash list中的對(duì)應(yīng)的列表刪除,要?jiǎng)h除 可以通過命令
? ? ? ? ? ? ? ? ? ? ?git stash drop這個(gè)命令
? ? ? ? ? ? ? ? ? ? 也可以通過命令: git stash pop 這個(gè)命令將隱藏的內(nèi)容顯示,并且會(huì)將git stash list中的對(duì)應(yīng)列表刪除。????
????????????????????接下來你就可以繼續(xù)在原來的基礎(chǔ)上工作了
? ? ? ? 19.創(chuàng)建的分支沒有被合并,但是還是要?jiǎng)h除它,我們就使用命令強(qiáng)行刪除,如下
? ? ? ? ? ? ? ? ????git branch -D feature
? ? ? ? 20.多人協(xié)作
? ??????????????git checkout -b dev origin/dev? ? ? ? 創(chuàng)建遠(yuǎn)程dev分支到本地,并切換到本地dev分支
? ??????????????小結(jié)
????????????????????????查看遠(yuǎn)程庫信息,使用git remote -v;
????????????????????????本地新建的分支如果不推送到遠(yuǎn)程,對(duì)其他人就是不可見的;
????????????????????????從本地推送分支,使用git push origin branch-name,如果推送失敗,先用git pull抓取遠(yuǎn)程的新提交;
????????????????????????在本地創(chuàng)建和遠(yuǎn)程分支對(duì)應(yīng)的分支,使用git checkout -b branch-name origin/branch-name,本地和遠(yuǎn)程分支的名稱最好一致;
????????????????????????建立本地分支和遠(yuǎn)程分支的關(guān)聯(lián),使用git branch --set-upstream branch-name origin/branch-name;
????????????????????????從遠(yuǎn)程抓取分支,使用git pull,如果有沖突,要先處理沖突。
? ? ????21.tag命令
? ? ? ? ? ? ? ? git tag v1.0? ? ?打包標(biāo)簽ming
? ? ? ? ? ? ? ? git tag v0.9? ?commitid? ?打包歷史標(biāo)簽
? ??????????????小結(jié)
????????????????????命令git tag 用于新建一個(gè)標(biāo)簽,默認(rèn)為HEAD,也可以指定一個(gè)commit id;
????????????????????git tag -a -m "blablabla..."可以指定標(biāo)簽信息;
????????????????????git tag -s -m "blablabla..."可以用PGP簽名標(biāo)簽;
? ? ? ? ? ? ? ? ? ? ?命令git tag可以查看所有標(biāo)簽。
? ? ? ? ? ? ? ? ? ?操作標(biāo)簽
? ??????????????????????小結(jié)
????????????????????????????????命令git push origin 可以推送一個(gè)本地標(biāo)簽;
????????????????????????????????命令git push origin --tags可以推送全部未推送過的本地標(biāo)簽;
????????????????????????????????命令git tag -d 可以刪除一個(gè)本地標(biāo)簽;
????????????????????????????????命令git push origin :refs/tags/可以刪除一個(gè)遠(yuǎn)程標(biāo)簽。