关于Git中的一些常用的命令
深入了解git的checkout命令
檢出命令(git checkout)是Git最常用的命令之一,同時(shí)也是一個(gè)很危險(xiǎn)的命令.
因?yàn)檫@條命令會(huì)重寫工作區(qū).檢出命令的用法如下:
用法一: git checkout [-q] [<commit>] [--] <path>...
用法二: git checkout [<branch>]
用法三: git checkout [-m] [[-b|--orphan] <new_branch>] [<start_point>>]
第一種用法的<commit>是可選項(xiàng),如果省略則相當(dāng)于從暫存區(qū)(index)進(jìn)行檢出.
這和之前的重置命令大不相同:重置的默認(rèn)值是HEAD,而檢出的默認(rèn)值是暫存區(qū).
因此重置一般用于重置暫存區(qū)(除非使用--hard參數(shù),否則不重置工作區(qū))
而檢出命令主要是覆蓋工作區(qū)(如果<commit>不省略,也會(huì)替換暫存區(qū)中相應(yīng)的文件).
?
第一種用法:
?
先來合個(gè)影:
在Git中,"留影"用的命令是叫做tag,更加專業(yè)的術(shù)語(yǔ)叫做"里程碑"(打tag,或者打標(biāo)簽)
"留影"的命令如下:
$ git tag -m "say bye to previous" ?old_practice
只需要知道里程碑也無(wú)非是一個(gè)引用.通過記錄提交ID(或者創(chuàng)建Tag對(duì)象)來為當(dāng)前版本庫(kù)的狀態(tài)進(jìn)行"留影"
$ ls .git/refs/tags/old_practice?
?
留影之后,可以執(zhí)行g(shù)it describe命令將最新提交顯示為一個(gè)容易記憶的名字.
顯示的時(shí)候會(huì)選取離該提交最近的里程碑作為"基礎(chǔ)版本號(hào)",后面附加標(biāo)識(shí)距離"基礎(chǔ)版本"
的數(shù)字,以及該提交的SHA1哈希值的縮寫.因?yàn)樽钚碌奶峤簧锨『帽淮蛄艘粋€(gè)"里程碑".
所以直接顯示"里程碑"的名稱.這個(gè)技術(shù)會(huì)在后面的示例代碼中經(jīng)常用到.
?
刪除文件:(這個(gè)時(shí)候工作區(qū)只有一個(gè)test1.txt文件是已經(jīng)commit結(jié)束,又增加了新的東西,處于modify狀態(tài))
在這個(gè)暫存區(qū)和工作區(qū)都包含文件修改的情況下,使用刪除命令更具有挑戰(zhàn)性.
刪除命令有很多種使用方法,有的方法很巧妙,而有的方法則需要更多的輸入.
為了分別介紹不同的刪除方法.還要使用之前使用過的保存進(jìn)度的git stash 命令.
保存進(jìn)度:
?
?
在恢復(fù)進(jìn)度.注意不要使用git stash pop ,而是使用git stash apply,因?yàn)檫@個(gè)保存的進(jìn)度要被多次用到.
本地刪除不是真的刪除.
$ls是看工作區(qū)中有哪些文件.
$rm test1.txt 命令執(zhí)行之后,工作區(qū)中處于修改Modified狀態(tài)的test1.txt文件被刪除了.
但是執(zhí)行$ git ls-files 之后還是可以看出有文件的.
從文件的狀態(tài)來看,文件只是在本地進(jìn)行了刪除,尚未添加到暫存區(qū)(提交任務(wù))中.
也就是說:直接在工作區(qū)刪除,對(duì)暫存區(qū)和版本庫(kù)沒有任何影響.
從Git的狀態(tài)中可以看出,本地刪除如果要反應(yīng)在暫存區(qū)中應(yīng)該用git rm命令,對(duì)不向刪除的文件執(zhí)行
git checkout -- <file>,可以讓文件在工作區(qū)中重現(xiàn).
這個(gè)時(shí)候如果用checkout命令的話,剛才已經(jīng)"被刪除"的test1.txt就會(huì)恢復(fù)在工作區(qū)了.
不過這個(gè)文件是沒有修改之前的狀態(tài).上面的圖中我也已經(jīng)$git status 了.
?
執(zhí)行g(shù)it rm命令刪除文件
$ git rm test1.txt
這樣刪除的動(dòng)作加入了暫存區(qū),這時(shí)執(zhí)行提交動(dòng)作,就從真正意義上執(zhí)行了文件刪除.
$ git commit -m "delete files(using:git rm)"
不過不要擔(dān)心,文件只是在版本庫(kù)的最新提交中被刪除了,在歷史提交中尚在.可以通過下面的命令查看歷史版本的文件列表.
$ git ls-files --with-tree=HEAD^
也可以查看在歷史版本中尚在的刪除文件的內(nèi)容.
$git cat-file -p HEAD^:test1.txt
?
命令git add -u 快速標(biāo)記刪除
在前面執(zhí)行g(shù)it rm命令時(shí),寫下了所有要?jiǎng)h除的文件名,很長(zhǎng).能不能簡(jiǎn)化些?
實(shí)際上git add就可以.即使用-u參數(shù)調(diào)用git add命令.含義是將本地有改動(dòng)(包括修改和刪除)的文件標(biāo)記到暫存區(qū).
為了重現(xiàn)剛才的場(chǎng)景,先使用重置命令拋棄最新的提交,再使用進(jìn)度回復(fù)到之前的狀態(tài).
文件的整個(gè)過程操作:
上圖中$git stash apply -q 恢復(fù)保存的進(jìn)度(參數(shù)-q 使得命令進(jìn)入安靜模式)
執(zhí)行完上面這個(gè)命令恢復(fù)到了在test1.txt的modified狀態(tài).
執(zhí)行 git add -u 命令可以將(被版本庫(kù)追蹤的)本地文件的變更(修改,刪除)全部記錄到暫存區(qū)中.
?
轉(zhuǎn)載于:https://www.cnblogs.com/DreamDrive/p/4156493.html
總結(jié)
以上是生活随笔為你收集整理的关于Git中的一些常用的命令的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何使用窗体开发-理解那些函数怎么来的?
- 下一篇: apache2和jk和tomcat安装笔