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