亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 編程設計 > 正文

適合新手學習的git教程分享

2020-06-27 15:22:47
字體:
來源:轉載
供稿:網友

Git 起源
同生活中的許多偉大事件一樣,Git 誕生于一個極富紛爭大舉創新的年代。Linux 內核開源項目有著為數眾廣的參與者。絕大多數的 Linux 內核維護工作都花在了提交補丁和保存歸檔的繁瑣事務上(1991-2002年間)。到 2002 年,整個項目組開始啟用分布式版本控制系統 BitKeeper 來管理和維護代碼。到了 2005 年,開發 BitKeeper 的商業公司同 Linux 內核開源社區的合作關系結束,他們收回了免費使用 BitKeeper 的權力。這就迫使 Linux 開源社區(特別是 Linux 的締造者 Linus Torvalds )不得不吸取教訓,只有開發一套屬于自己的版本控制系統才不至于重蹈覆轍。他們對新的系統制訂了若干目標:
Git 和其他版本控制系統的主要差別在于,Git 只關心文件數據的整體是否發生變化,而大多數其他系統則只關心文件內容的具體差異。這類系統(CVS,Subversion,Perforce,Bazaar 等等)每次記錄有哪些文件作了更新,以及都更新了哪些行的什么內容.
Git 并不保存這些前后變化的差異數據。實際上,Git 更像是把變化的文件作快照后,記錄在一個微型的文件系統中。每次提交更新時,它會縱覽一遍所有文件的指紋信息并對文件作一快照,然后保存一個指向這次快照的索引。為提高性能,若文件沒有變化,Git 不會再次保存,而只對上次保存的快照作一鏈接.這是 Git 同其他系統的重要區別。它完全顛覆了傳統版本控制的套路,并對各個環節的實現方式作了新的設計。Git 更像是個小型的文件系統

1、創建新倉庫

 

復制代碼
代碼如下:

gitinit
touchtest.txt
gitadd--a
gitcommit-m"fistcommit"

 

初始化新倉庫,在當前目錄下由一個.git的目錄,所有git需要的數據和資源都放在這個目錄中,在當面目錄下添加文件后,需要通過gitadd添加到文件追蹤管理(添加到暫存區,數據存放在.git/index目錄索引,數據內部保存在.git/objects中),gitcommit-m"提交說明備注"提交的信息會提交到數據倉庫,數據提交到正式倉庫,具體保存在.git/objects中,如以上提交會包含一個commit,tree,blob對象。

2、從現有倉庫克隆
 

復制代碼
代碼如下:

gitcloneurl
<a href="mailto:gitclonegit@github.com:torvalds/linux.git">gitclonegit@github.com:torvalds/linux.git</a>

如從gitHub上克隆一份linux的源碼,不僅是克隆最新版本的源碼,還克隆了所有數據倉庫的歷史版本,每個文件的每一個版本,這個時候及時服務器github發生故障,可以用本地數據倉庫重建服務器上的倉庫。可以回復到從服務器克隆或最后更一次從服務器拉去的狀態。在.git目錄中,已經保存了所有版本記錄,本地文件夾即工作目錄的所有文件刪除了,然后從中取出最新版本的文件拷貝。

 

3、檢查文件更新狀態
要求確定當前工作區和暫存區文件的狀態,可以通過gitstatus命令。在工作區和暫存區的目錄狀態可以查看。
gitstatus
Onbranchmasternothingtocommit,workingdirectoryclean
當前在默認master分支,當前工作目錄和暫存區沒有任何跟蹤的文件,也沒有任何文件提交后更改,也沒有新增加,未被跟蹤的文件。
notepadtest.txt
notepadt.txt
修改test.txt文件,新添加一個t.txt文件,查看當前文件狀態。

 

復制代碼
代碼如下:

$gitstatus
#Onbranchmaster
#Changesnotstagedforcommit:
#(use"gitadd<file>..."toupdatewhatwillbecommitted)
#(use"gitcheckout--<file>..."todiscardchangesinworkingdi
#
#modified:test.txt
#
#Untrackedfiles:
#(use"gitadd<file>..."toincludeinwhatwillbecommitted)
#
#t.txt
nochangesaddedtocommit(use"gitadd"and/or"gitcommit-a")

 

新增加的文件t.txt在未跟蹤文件范圍Untrackedfiles范圍,需要通過gitadd把改文件添加的暫存區,歸入的版本跟蹤管理。

4、添加文件到暫存區
 

復制代碼
代碼如下:

$gitadd.
$gitstatus
#Onbranchmaster
#Changestobecommitted:
#(use"gitresetHEAD<file>..."tounstage)
#
#modified:h.txt
#newfile:test.txt

 

gitadd.把當前所有目錄文件所有新文件和修改文件添加到暫存區,如果test.txt文件提示是Changesnotstagedforcommit,說明此跟蹤文件已經發生修改,但是還未添加到暫存區,把修改的文件通過gitadd命令添加到暫存區后。提示Changestobecommitted.文件已經暫存,隨時可以提交到倉庫。h.txt新添加文件從未跟蹤狀態Untrackedfiles,通過gitadd命令添加到暫存區,已加入跟蹤文件的范圍。

5、版本提交
 

復制代碼
代碼如下:

$gitcommit-m"thisistestcommit"
[masterd4a498a]thisistestcommit
gitcommit--amend--reset-author</p> <p>2fileschanged,3insertions(+)
createmode100644t.txt

 

通過gitcommit-m"xxx"將當前暫存區的內容提交到倉庫,本次commit提交文件是在默認master分支,提交commit對象存放在.git/objects的d4/1498a...的文件中,該文件指向一個樹tree對象。

6、查看當前提交日志記錄
 

復制代碼
代碼如下:

$gitlog
commitd4a498a197c24421acee5c5ff96cfbc7e5c3be9e
Author:andy<<a href="mailto:andy@gmail.com">andy@gmail.com</a>>
Date:SatMar814:23:372014+0800</p> <p>thisistestcommit</p> <p>commit80071e48614361dc282473d6482e3faa9fec17d9
Author:andy<<a href="mailto:andy@gmail.com">andy@gmail.com</a>>
Date:SatMar813:35:132014+0800</p> <p>1stcommit

 

gitlog命令查看當前版本


7、文件差異比較

工作區和暫存區文件比較用gitdiff命令,暫存區和最近一天提交版本之間的差異,可以用gitdiff--cached/staged.如下:
目前在test.txt文件只有1111111文件內容,我在文件test.txt中添加22222222等內容,比較當前暫存區和工作文件差異

 

復制代碼
代碼如下:

$notepadtest.txt
$gitdiff
diff--gita/test.txtb/test.txt
index0147537..f33d264100644
---a/test.txt
+++b/test.txt
@@-1,3+1,4@@
11111111111111
+22222222222222
$gitstatus
#Onbranchmaster
#Changesnotstagedforcommit:
#(use"gitadd<file>..."toupdatewhatwillbecommitted)
#(use"gitcheckout--<file>..."todiscardchangesinworkingd
#
#modified:test.txt
#
nochangesaddedtocommit(use"gitadd"and/or"gitcommit-a")
$gitdiff--staged
可以發現工作區比暫存區test.txt文件多增加了22222222222222內容。暫存區和數據倉庫內容是完全相同的。同時看看當前工作區狀態?,F在我們吧剛剛修改的內容添加到暫存區,同時比較暫存區和數據倉庫文件差異。
$gitaddtest.txt
$gitdiff
$gitstatus
#Onbranchmaster
#Changestobecommitted:
#(use"gitresetHEAD<file>..."tounstage)
#
#modified:test.txt
#

 

把工作區修改的內容更新到暫存區后,可以看出此時暫存區和工作區文件完全相同。狀態是是已暫存,帶提交狀態。與此同時,我們可以比較暫存區和數據殘酷之間的差異和比較。

 

復制代碼
代碼如下:

$gitdiff--staged
diff--gita/test.txtb/test.txt
index0147537..f33d264100644
---a/test.txt
+++b/test.txt
@@-1,3+1,4@@
11111111111111
+22222222222222

 

我們可以很清楚的看到當前暫存區和數據倉庫版本比較。暫存區test.txt內容比最近一次提交內容多22222222222222一行數據。提交數據到數據倉庫。我們現在可以把工作區目錄和數據倉庫比較,看看test.txt直接的文件內容差異。

 

復制代碼
代碼如下:

$gitdiffhead
diff--gita/test.txtb/test.txt
index0147537..f33d264100644
---a/test.txt
+++b/test.txt
@@-1,3+1,4@@
11111111111111
+22222222222222

 

可以很立即看出工作區文件內容比較倉庫有新修改的內容。此時我們提交更新所有文件都沒有差異了??纯次募町?。

 

復制代碼
代碼如下:

$gitcommit-m"testgitdiff"
[masterfc0166f]testgitdiff
Committer:andy<<a href="mailto:andy@gmail.com">andy@gmail.com</a>></p> <p>gitcommit--amend--reset-author</p> <p>1filechanged,1insertion(+)
$gitdiff
$gitdiff--staged
$gitdiffhead

 

8、文件刪除和移動

所有的工作區rmxxx刪除后,可以直接從數據倉庫獲取最近一次提交版本的內容gitrmxxx。直接從數據倉庫刪除此文件內容。

 

復制代碼
代碼如下:

$ls
h.txttest.txt</p> <p>$rmh.txt</p> <p>$ls
test.txt</p> <p>$gitdiff
diff--gita/h.txtb/h.txt
deletedfilemode100644
index456f979..0000000
---a/h.txt
+++/dev/null
@@-1,3+0,0@@
-welcometohere
-verygood

 

可以通過文某比較當前的工作目錄h.txt文件已經被刪除了,工作區目錄和暫存區比較文件差異也可以返現文件刪除模式。接下來刪除暫存區目錄

 

復制代碼
代碼如下:

$gitdiff--staged</p> <p>$gitrmh.txt
rm'h.txt'</p> <p>$gitdiff--staged
diff--gita/h.txtb/h.txt
deletedfilemode100644
index456f979..0000000
---a/h.txt
+++/dev/null
@@-1,3+0,0@@
-welcometohere
-verygood
-
$gitstatus
#Onbranchmaster
#Changestobecommitted:
#(use"gitresetHEAD<file>..."tounstage)
#
#deleted:h.txt
#

 

通過刪除暫存區文件前后可以比較出文件的差異。此時文件也不在跟蹤狀態。還有我們僅僅希望刪除暫存區的內容,不刪除工作區的內容
 

復制代碼
代碼如下:

gitrm--cached-fh.txt的方式來實現,特別是針對工作區有修改,要刪除暫存區內容。
$gitreset--hard
HEADisnowatfc0166ftestgitdiff</p> <p>$ls
h.txttest.txt
$gitrm--cachedh.txt
rm'h.txt'</p> <p>$gitdiff</p> <p>$gitdiffhead
diff--gita/h.txtb/h.txt
deletedfilemode100644
index456f979..0000000
---a/h.txt
+++/dev/null
@@-1,3+0,0@@
-welcometohere
-verygood
-
$gitdiff-cached
error:invalidoption:-cached</p> <p>$gitdiff--cachedh.txt
diff--gita/h.txtb/h.txt
deletedfilemode100644
index456f979..0000000
---a/h.txt
+++/dev/null
@@-1,3+0,0@@
-welcometohere
-verygood

 

移動
git移動文件操作是是相對先移動復制一個新文件,刪除原文件,添加新文件到跟蹤范圍。
 

復制代碼
代碼如下:

$ls
h.txttest.txt</p> <p>$gitmvh.txtd.txt結果是等同于,相當于以下三條命令</p> <p>$ls
d.txttest.txt</p> <p>$mvd.txtto.txt</p> <p>$gitrmd.txt
rm'd.txt'</p> <p>$gitaddto.txt

 

9、查看提交歷史
 

復制代碼
代碼如下:

$gitlog
commitfc0166f53a45cfc4c17079e5e3454fb7e3136cb6
Author:andy<<a href="mailto:andy@gmail.com">andy@gmail.com</a>>
Date:SatMar815:52:102014+0800</p> <p>testgitdiff</p> <p>commitd6eab3a38aee0b25ac395899c82edd48723a2ea9
Author:andy<<a href="mailto:andy@gmail.com">andy@gmail.com</a>>
Date:SatMar815:36:532014+0800</p> <p>enforcecommit'</p> <p>commit85ec024140442df6db8625a07c2ee7369cceb704
Author:andy<<a href="mailto:andy@gmail.com">andy@gmail.com</a>>
Date:SatMar815:35:442014+0800

 

com3
gitlog查看提交歷史,gitlog-p-n最近n次提交的內能和差異。查看歷史記錄統計信息gitlog--stat,查看提交的歷史記錄格式可自由選擇。
 

復制代碼
代碼如下:

$gitlog--pretty=format:"%h-%an,%ar:%s"
fc0166f-yyf,48minutesago:testgitdiff
d6eab3a-yyf,63minutesago:enforcecommit'
85ec024-yyf,65minutesago:com3
d4a498a-unknown,2hoursago:thisistestcommit
80071e4-unknown,3hoursago:1stcommit

 

列出了常用的格式占位符寫法及其代表的意義。

選項說明
%H提交對象(commit)的完整哈希字串
%h提交對象的簡短哈希字串
%T樹對象(tree)的完整哈希字串
%t樹對象的簡短哈希字串
%P父對象(parent)的完整哈希字串
%p父對象的簡短哈希字串
%an作者(author)的名字
%ae作者的電子郵件地址
%ad作者修訂日期(可以用-date=選項定制格式)
%ar作者修訂日期,按多久以前的方式顯示
%cn提交者(committer)的名字
%ce提交者的電子郵件地址
%cd提交日期
%cr提交日期,按多久以前的方式顯示
%s提交說明
$gitlog--pretty=format:"%h%s"--graph
*78d907adevbranchcommit
*fc0166ftestgitdiff
*d6eab3aenforcecommit'
*85ec024com3
*d4a498athisistestcommit
*80071e41stcommit

選項說明
-p按補丁格式顯示每個更新之間的差異。
--stat顯示每次更新的文件修改統計信息。
--shortstat只顯示--stat中最后的行數修改添加移除統計。
--name-only僅在提交信息后顯示已修改的文件清單。
--name-status顯示新增、修改、刪除的文件清單。
--abbrev-commit僅顯示SHA-1的前幾個字符,而非所有的40個字符。
--relative-date使用較短的相對時間顯示(比如,“2weeksago”)。
--graph顯示ASCII圖形表示的分支合并歷史。
--pretty使用其他格式顯示歷史提交信息??捎玫倪x項包括oneline,short,full,fuller和format(后跟指定格式)


10、撤銷操作

可以修改最后一次提交的內容,當你發現最近一次提交內容不正確時候,可以通過gitcommit--amend修改
 

復制代碼
代碼如下:

$gitcommit--amend-m"modifycommit"
[masterc660522]modifycommit
$gitlog--oneline
c660522modifycommit
fc0166ftestgitdiff
d6eab3aenforcecommit'
85ec024com3
d4a498athisistestcommit
80071e41stcommit

 

11、取消文件修改
 

復制代碼
代碼如下:

gitreset|gitresethead將head指向的目錄樹重置的暫存區
gitreset--softhead^工作區和暫存區不變,但是引用向前回退一次,當對最新提交不滿意的時候,撤銷最新提交以便更改
gitcommit-e-F.git/COMMIT_EDITMSG以上兩個命令相當于gitcommit--amend
gitresethead^
gitreset--mixedhead^暫存區和引用回退到上一次提交之前
gitreset--hardhead^引用工作區暫存區徹底消除

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩激情视频在线播放| 最近2019中文字幕一页二页| 亚洲欧美日韩天堂一区二区| 久久久久久噜噜噜久久久精品| 国产亚洲精品一区二区| 久久国产精品偷| 欧美亚洲免费电影| 国产成人精品999| 性欧美暴力猛交69hd| 中文字幕日韩av电影| 欧美日韩视频免费播放| 亚洲品质视频自拍网| 国产性猛交xxxx免费看久久| 日本精品久久久久影院| 欧美日韩久久久久| 久久精视频免费在线久久完整在线看| 国产精品久久久久久久久久尿| 亚洲激情视频在线| 久久99国产综合精品女同| 91免费国产视频| 亚洲电影免费观看高清完整版在线观看| 欧美性猛交xxxx富婆| 精品香蕉在线观看视频一| 国产精品久久久久一区二区| 97超级碰碰碰| 欧洲精品久久久| 青草成人免费视频| 高清欧美性猛交| 欧美一区二区三区精品电影| 日韩高清av一区二区三区| 日韩久久精品电影| 亚洲人在线观看| 亚洲第一区第二区| 国产精品三级久久久久久电影| 日韩欧美aⅴ综合网站发布| 国产成人av在线播放| 久久伊人免费视频| 久久久久久久久中文字幕| 亚洲色图偷窥自拍| 亚洲丝袜在线视频| 精品国产一区二区三区四区在线观看| 国产精品久久久久久久7电影| 欧美性猛交xxxx| 欧美丰满少妇xxxxx| 中文字幕日韩av| 日韩精品视频免费专区在线播放| 日韩在线观看高清| 亚洲国产精品人人爽夜夜爽| 91精品久久久久久久久久久久久| 久久91精品国产91久久跳| 亚洲国产欧美一区| 成人国产精品久久久| 成人激情在线观看| 日韩免费在线免费观看| 国模私拍一区二区三区| 中文字幕在线看视频国产欧美在线看完整| 92裸体在线视频网站| 欧美华人在线视频| 久久国产精品99国产精| 黄网站色欧美视频| 欧美成人网在线| 精品亚洲男同gayvideo网站| 日韩国产欧美精品一区二区三区| 亚洲free性xxxx护士白浆| 欧美日韩免费区域视频在线观看| 日韩电影中文字幕在线观看| 午夜精品视频网站| 日韩中文字幕在线视频| 亚洲xxx大片| 日韩激情av在线播放| 97视频在线观看网址| 亚洲最大福利视频网| 91亚洲国产成人久久精品网站| 青青青国产精品一区二区| 岛国精品视频在线播放| 亚洲精品第一国产综合精品| 欧美激情在线有限公司| 国语自产精品视频在免费| 国产精品爱久久久久久久| 黑人巨大精品欧美一区免费视频| 中文字幕亚洲在线| 亚洲精品一区二区三区婷婷月| 一区二区在线视频| 欧美亚洲激情视频| 日韩国产激情在线| 一本久久综合亚洲鲁鲁| 亚洲男女自偷自拍图片另类| 成人黄色在线观看| 成人情趣片在线观看免费| 久久亚洲精品国产亚洲老地址| 青青草原一区二区| 色综合色综合网色综合| 欧美在线性视频| 久久综合88中文色鬼| 亚洲国产成人精品女人久久久| 中文字幕亚洲图片| 欧美成aaa人片免费看| 亚洲国产成人久久综合一区| 91在线观看欧美日韩| 亚洲国产天堂久久国产91| 亚洲性视频网址| 久久久久久久久国产精品| 日韩精品免费观看| 欧美一级淫片videoshd| 欧美精品在线网站| 91极品视频在线| 日韩精品在线观| 久久久精品日本| 国产精品夜色7777狼人| 中文字幕亚洲无线码在线一区| 亚洲精品久久在线| 日本高清久久天堂| 26uuu久久噜噜噜噜| 亚洲日本欧美中文幕| 萌白酱国产一区二区| 国产午夜精品视频| 欧美精品中文字幕一区| 欧美成人免费播放| 91产国在线观看动作片喷水| 成人精品视频在线| 日本高清不卡的在线| 日本一区二区三区四区视频| 久久综合久久美利坚合众国| www.亚洲男人天堂| 亚洲第一精品夜夜躁人人躁| 亚洲另类欧美自拍| 成人免费淫片视频软件| 欧美电影电视剧在线观看| 亚洲精品国产拍免费91在线| 久久天天躁狠狠躁夜夜av| 91免费的视频在线播放| 日韩亚洲在线观看| 欧美日韩成人免费| 欧美在线视频在线播放完整版免费观看| 欧美日韩国产综合新一区| 久久99热精品这里久久精品| 亚洲视屏在线播放| 亚洲欧美999| 成人国内精品久久久久一区| 不卡中文字幕av| 国产精品极品尤物在线观看| 97av在线视频免费播放| 欧美性猛交xxxx黑人| 成人网址在线观看| 精品国产乱码久久久久久天美| 久久综合久久美利坚合众国| 91精品国产91久久久久久久久| 97久久久久久| 国产精品网站大全| 色婷婷av一区二区三区久久| 欧美激情第6页| 欧美日韩国产一区二区三区| 亚洲精品久久久久中文字幕二区| 国产福利视频一区二区| 日韩欧美亚洲一二三区| 精品久久国产精品| 2019国产精品自在线拍国产不卡| 91av在线免费观看视频| 久久资源免费视频| 亚洲天堂成人在线视频| 亚洲欧美日韩中文在线| 98精品在线视频| 亚洲欧洲一区二区三区在线观看| 久久91亚洲人成电影网站|