7、git reset
將版本庫還原到歷史的某個(gè)時(shí)刻的狀態(tài)
git reset --hard logid(logid的前幾位即可)
將版本庫還原到上一次commit之前的狀態(tài)
git reset --hard HEAD^
有時(shí)候,進(jìn)行了錯(cuò)誤的提交,但是還沒有push到遠(yuǎn)程分支,想要撤銷本次提交,可以使用git reset –-soft/hard命令。
回退到某個(gè)版本,只回退了commit的信息,代碼修改過的沒變。如果還要提交,直接commit即可;
git reset –-soft
徹底回退到某個(gè)版本,本地的源碼也會(huì)變?yōu)樯弦粋€(gè)版本的內(nèi)容,撤銷的commit中所包含的更改被沖掉,即commit與修改過代碼都撤銷,變?yōu)樵瓉淼哪硞€(gè)版本;
git reset -–hard
8、git config
添加版本庫的用戶名到本地配置文件
git config --global user.name 'username'
添加版本庫的用戶郵箱到本地配置文件
git config --global user.emal 'emal'
9、git diff
執(zhí)行g(shù)it diff來查看執(zhí)行g(shù)it status的結(jié)果的詳細(xì)信息。
git diff命令顯示已寫入緩存與已修改但尚未寫入緩存的改動(dòng)的區(qū)別。
尚未緩存的改動(dòng):
git diff
查看已緩存的改動(dòng)
git diff --cached
查看已緩存的與未緩存的所有改動(dòng)
git diff HEAD
顯示摘要而非整個(gè)diff
git diff --stat
舉個(gè)栗子:
git status -s
git diff
git add hello.php
git status -s
git diff --cached
10、git commit
git commit -m 'test comment from w3cschool.cn'
提交緩存的流程太過繁瑣,Git 也允許你用 -a 選項(xiàng)跳過這一步
git add
git commit -am 'changes to hello file'
表示提交的信息中帶有署名信息
git commit --signoff -m 'xxx'
表示對(duì)上一次提交的信息,進(jìn)行修改提交
git commit --amend 'xxx'
11、git rm
將文件從緩存區(qū)中移除
git rm
git rm hello.php
將文件從緩存區(qū)和你的硬盤中(工作目錄)刪除。如果要在工作目錄中留著該文件
git rm file
git rm --cached
12、git log
git log 查看提交歷史
git log --oneline --oneline 選項(xiàng)來查看歷史記錄的簡(jiǎn)潔的版本
git log --oneline --graph -graph 選項(xiàng),查看歷史中什么時(shí)候出現(xiàn)了分支、合并。
git log --reverse --oneline '--reverse'參數(shù)來逆向顯示所有日志
git log --author=Linus --oneline -5 --author , 例如,比方說我們要找 Git 源碼中 Linus 提交的部分
git log --oneline --before={3.weeks.ago} --after={2010-04-18} --no-merges
13、git tag
查看所有標(biāo)簽
git tag
-a選項(xiàng)意為“創(chuàng)建一個(gè)帶注解的標(biāo)簽”。不用-a選項(xiàng)也可以執(zhí)行,但它不會(huì)記錄這標(biāo)簽是啥時(shí)候打的,誰打的,也不會(huì)讓你添加標(biāo)簽的注解
git tag -a v1.0
git log --online --decorate --graph --decorate 時(shí),我們可以看到我們的標(biāo)簽
追加標(biāo)簽
git tag -a v0.9 85fc7e7
git log --oneline --decorate --graph
指定標(biāo)簽信息命令
git tag -a -m "w3cschool.cn標(biāo)簽"
PGP標(biāo)簽命令
git tag -s -m "w3cschool.cn標(biāo)簽"
查看版本:
git tag
創(chuàng)建版本:
git tag [name]
刪除版本:
git tag -d [name]
查看遠(yuǎn)程版本:
git tag -r
創(chuàng)建遠(yuǎn)程版本(本地版本push到遠(yuǎn)程):
git push origin [name]
刪除遠(yuǎn)程版本:
git push origin :refs/tags/[name]
合并遠(yuǎn)程倉庫的tag到本地:
git pull origin --tags
上傳本地tag到遠(yuǎn)程倉庫:
git push origin --tags
創(chuàng)建帶注釋的tag:
git tag -a [name] -m 'yourMessage'
二、Git與SVN比較
SVN是當(dāng)前使用最多的版本控制工具。與它相比,Git最大的優(yōu)勢(shì)在于兩點(diǎn):易于本地增加分支和分布式的特性。
1、本地增加分支
圖中Git本地和服務(wù)器端結(jié)構(gòu)都很靈活,所有版本都存儲(chǔ)在一個(gè)目錄中,你只需要進(jìn)行分支的切換即可達(dá)到在某個(gè)分支工作的效果。
而SVN則完全不同,如果你需要在本地試驗(yàn)一些自己的代碼,只能本地維護(hù)多個(gè)不同的拷貝,每個(gè)拷貝對(duì)應(yīng)一個(gè)SVN服務(wù)器地址。
舉個(gè)例子:
使用SVN作為版本控制工具,當(dāng)正在試圖增強(qiáng)一個(gè)模塊,工作做到一半,由于會(huì)改變?cè)K的行為導(dǎo)致代碼服務(wù)器上許多測(cè)試的失敗,所以并沒有提交代碼。
這時(shí)候假如現(xiàn)在有一個(gè)很緊急的Bug需要處理, 必須在兩個(gè)小時(shí)內(nèi)完成。我只好將本地的所有修改diff,并輸出成為一個(gè)patch文件,然后回滾有關(guān)當(dāng)前任務(wù)的所有代碼,再開始修改Bug的任務(wù),等到修改好后,在將patch應(yīng)用回來。前前后后要完成多個(gè)繁瑣的步驟,這還不計(jì)中間代碼發(fā)生沖突所要進(jìn)行的工作量。
可是如果使用Git, 我們只需要開一個(gè)分支或者轉(zhuǎn)回到主分支上,就可以隨時(shí)開始Bug修改的任務(wù),完成之后,只要切換到原來的分支就可以優(yōu)雅的繼續(xù)以前的任務(wù)。只要你愿意,每一個(gè)新的任務(wù)都可以開一個(gè)分支,完成后,再將它合并到主分支上,輕松而優(yōu)雅。
2、分布式提交
Git 可以本地提交代碼,所以在上面的圖中,Git有利于將一個(gè)大任務(wù)分解,進(jìn)行本地的多次提交;
而SVN只能在本地進(jìn)行大量的一次性更改,導(dǎo)致將來合并到主干上造成巨大的風(fēng)險(xiǎn)。
3、日志查看
Git 的代碼日志是在本地的,可以隨時(shí)查看;
SVN的日志在服務(wù)器上的,每次查看日志需要先從服務(wù)器上下載下來。
例如:代碼服務(wù)器在美國(guó),當(dāng)每次查看幾年前所做的工作時(shí),日志下載可能需要十分鐘,這不能不說是一個(gè)痛苦。但是如果遷移到Git上,利用Git日志在本地的特性,查看某個(gè)具體任務(wù)的所有代碼歷史,每次只需要幾秒鐘,大大方便了工作,提高了效率。
當(dāng)然分布式并不是說用了Git就不需要一個(gè)代碼中心服務(wù)器,如果你工作在一個(gè)團(tuán)隊(duì)里,還是需要一個(gè)服務(wù)器來保存所有的代碼的。
-
Linux
+關(guān)注
關(guān)注
87文章
11331瀏覽量
209991 -
源代碼
+關(guān)注
關(guān)注
96文章
2946瀏覽量
66837 -
Git
+關(guān)注
關(guān)注
0文章
201瀏覽量
15793
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論