欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

25個(gè) Git 進(jìn)階技巧(翻譯)

 更新時(shí)間:2024年07月02日 11:34:36   作者:Andy Jeffries  
這篇文章主要介紹了25個(gè) Git 進(jìn)階技巧(翻譯),需要的朋友可以參考下

作為一個(gè)對(duì)git感覺(jué)良好的人,我覺(jué)得分享從社區(qū)里掌握的一些有價(jià)值的信息,也許能幫某人解決問(wèn)題而不用做太深入研究。

基本技巧

1. 安裝后的第一步

在安裝好git后,你第一件該做的事是設(shè)置你的名字和電子郵箱,因?yàn)槊看翁峤欢家玫竭@些信息:

$ git config --global user.name "Some One"
$ git config --global user.email "someone@gmail.com"

2. Git是基于指針的

保存在git里的一切都是文件。當(dāng)你創(chuàng)建一個(gè)提交的時(shí)候,會(huì)建立一個(gè)包含你的提交信息和相關(guān)數(shù)據(jù)(名字,郵件地址,日期/時(shí)間,前一個(gè)提交,等等)的文件,并把它鏈接到一個(gè)樹(shù)文件中。這個(gè)樹(shù)文件中包含了對(duì)象或其他樹(shù)的列表。這里的提到的對(duì)象(或二進(jìn)制大對(duì)象)是和本次提交相關(guān)的實(shí)際內(nèi)容(它也是一個(gè)文件,另外,盡管文件名并沒(méi)有包含在對(duì)象里,但是存儲(chǔ)在樹(shù)中)。所有這些文件都使用對(duì)象的SHA-1哈希值作為文件名。

用這種方式,分支和標(biāo)簽就是簡(jiǎn)單的文件(基本上是這樣),包含指向該提交的SHA-1哈希值。使用這些索引會(huì)帶來(lái)優(yōu)秀的靈活性和速度,比如創(chuàng)建一個(gè)新分支就是簡(jiǎn)單地用分支名字和所分出的那個(gè)提交的SHA-1索引來(lái)創(chuàng)建一個(gè)文件。當(dāng)然,你不需要自己做這些,而只要使用Git命令行工具(或者GUI),但是實(shí)際上就是這么簡(jiǎn)單。

你也許聽(tīng)說(shuō)過(guò)叫HEAD的索引。這只是簡(jiǎn)單的一個(gè)文件,包含了你當(dāng)前指向的那個(gè)提交的SHA-1索引值。如果你正在解決一次合并沖突然后看到了HEAD,這并不是一個(gè)特別的分支或分支上的一個(gè)必需的特殊位置,只是標(biāo)明你當(dāng)前所在位置。

所有的分支指針都保存在.git/refs/heads里,HEAD在.git/HEAD里,而標(biāo)簽保存在.git/refs/tags里 - 自己可以隨便進(jìn)去看看。

3. 兩個(gè)父節(jié)點(diǎn) - 你沒(méi)看錯(cuò)!

在歷史中查看一個(gè)合并提交的信息時(shí),你將看到有兩個(gè)父節(jié)點(diǎn)(不同于工作副本上的常規(guī)提交的情況)。第一個(gè)父節(jié)點(diǎn)是你所在的分支,第二個(gè)是你合并過(guò)來(lái)的分支。

4. 合并沖突

目前我相信你碰到過(guò)合并沖突并且解決過(guò)。通常是編輯一下文件,去掉<<<<,====,>>>>標(biāo)志,保留需要留下的代碼。有時(shí)能夠看到這兩個(gè)修改之前的代碼會(huì)很不錯(cuò),比如,在這兩個(gè)現(xiàn)在沖突的分支之前的改動(dòng)。下面是一種方式:

$ git diff --merge
diff --cc dummy.rb 
index 5175dde,0c65895..4a00477 
--- a/dummy.rb
+++ b/dummy.rb
@@@ -1,5 -1,5 +1,5 @@@
 class MyFoo
 def say
-  puts "Bonjour"
 - puts "Hello world"
++ puts "Annyong Haseyo"
 end
 end

如果是二進(jìn)制文件,比較差異就沒(méi)那么簡(jiǎn)單了...通常你要做的就是測(cè)試這個(gè)二進(jìn)制文件的兩個(gè)版本來(lái)決定保留哪個(gè)(或者在二進(jìn)制文件編輯器里手工復(fù)制沖突部分)。從一個(gè)特定分支獲取文件拷貝(比如說(shuō)你在合并master和feature123兩個(gè)分支):

$ git checkout master flash/foo.fla # 或者...
$ git checkout feature132 flash/foo.fla
$ # 然后...
$ git add flash/foo.fla

另一種方式是通過(guò)git輸出文件 - 你可以輸出到另外的文件名,然后當(dāng)你決定了要用哪個(gè)后,再將選定的正確文件復(fù)制為正常的文件名:

$ git show master:flash/foo.fla > master-foo.fla
$ git show feature132:flash/foo.fla > feature132-foo.fla
$ # 檢出master-foo.fla和feature132-foo.fla
$ # 假如說(shuō)我們決定來(lái)自feature132的文件是正確的
$ rm flash/foo.fla
$ mv feature132-foo.fla flash/foo.fla
$ rm master-foo.fla
$ git add flash/foo.fla

更新:感謝Carl在原博客文章上評(píng)論里的提醒,你實(shí)際上可以用“git checkout —ours flash/foo.fla”和“git checkout —theirs flash/foo.fla”來(lái)檢出特定版本的文件,而不用記住你在合并的分支名字。就我個(gè)人來(lái)說(shuō)喜歡更精確一點(diǎn),但這也是一種方式...

記著在解決完沖突后要將文件加入提交(像我上面做的那樣)。

服務(wù)器,分支和標(biāo)簽

5. 遠(yuǎn)端服務(wù)器

git的一個(gè)超強(qiáng)大的功能就是可以有不止一個(gè)遠(yuǎn)端服務(wù)器(實(shí)際上你一直都在一個(gè)本地倉(cāng)庫(kù)上工作)。你并不是一定都要有這些服務(wù)器的寫權(quán)限,你可以有多個(gè)可以讀取的服務(wù)器(用來(lái)合并他們的工作)然后寫入到另外一個(gè)倉(cāng)庫(kù)。添加一個(gè)新的遠(yuǎn)端服務(wù)器很簡(jiǎn)單:

$ git remote add john git@github.com:johnsomeone/someproject.git

如果你想查看遠(yuǎn)端服務(wù)器的信息可以這樣做:

# 顯示每個(gè)遠(yuǎn)端服務(wù)器的URL
$ git remote -v 
 
# 提供更多詳細(xì)信息
$ git remote show name 

你隨時(shí)都可以查看本地分支和遠(yuǎn)端分支的差異:

$ git diff master..john/master

你也可以查看沒(méi)有在遠(yuǎn)端分支上的HEAD的改動(dòng):

$ git log remote/branch..
# 注意:..后面沒(méi)有結(jié)束的特定引用

6. 標(biāo)簽

在git里有兩種類型的標(biāo)簽 - 輕量級(jí)標(biāo)簽和帶注釋標(biāo)簽。記住技巧2里說(shuō)過(guò)git是基于指針的,這兩者之間的差異也很簡(jiǎn)單。輕量級(jí)標(biāo)簽只是一個(gè)簡(jiǎn)單的指向一次提交的帶名字指針。你隨時(shí)都可以將它指向另一個(gè)提交。帶注釋標(biāo)簽是一個(gè)指向標(biāo)簽對(duì)象的帶名字指針,帶有自己的信息和歷史。因?yàn)橛凶约旱男畔?,它可以根?jù)需要用GPG簽名。

建立這兩種類型的標(biāo)簽都很簡(jiǎn)單(只有一個(gè)命令行開(kāi)關(guān)的差異)

$ git tag to-be-tested
$ git tag -a v1.1.0 # 會(huì)提示輸入標(biāo)簽的信息

7. 建立分支

在git里建立分支非常簡(jiǎn)單(而且像閃電一樣快,因?yàn)樗恍枰獎(jiǎng)?chuàng)建一個(gè)小于100字節(jié)的文件)。用普通方式建立新分支并切換過(guò)去:

$ git branch feature132
$ git checkout feature132

當(dāng)然,如果你確定自己直接切換到新建的分支,可以用一個(gè)命令實(shí)現(xiàn):

$ git checkout -b feature132

如果你想重命名一個(gè)本地分支也很簡(jiǎn)單(可以顯示發(fā)生了什么的較長(zhǎng)的方式):

$ git checkout -b twitter-experiment feature132
$ git branch -d feature132

更新:你也可以(像Brian Palmer在原博客文章的評(píng)論里提出的)只用“git branch”的-m開(kāi)關(guān)在一個(gè)命令里實(shí)現(xiàn)(像Mike提出的,如果你只指定了一個(gè)分支參數(shù),就會(huì)重命名當(dāng)前分支):

$ git branch -m twitter-experiment
$ git branch -m feature132 twitter-experiment

8. 合并分支

也許在將來(lái)的某個(gè)時(shí)候,你希望將改動(dòng)合并。有兩種方式:

$ git checkout master
$ git merge feature83 # 或者...
$ git rebase feature83

merge和rebase之間的差別是merge會(huì)嘗試處理改動(dòng)并建立一個(gè)新的混合了兩者的提交。rebase會(huì)嘗試把你從一個(gè)分支最后一次分離后的所有改動(dòng),一個(gè)個(gè)加到該分支的HEAD上。不過(guò),在已經(jīng)將分支推到遠(yuǎn)端服務(wù)器后不要再rebase了 - 這會(huì)引起沖突/問(wèn)題。

如果你不確定在哪些分支上還有獨(dú)有的工作 - 所以你也不知道哪些分支需要合并而哪些可以刪除,git branch有兩個(gè)開(kāi)關(guān)可以幫你:

# 顯示已經(jīng)全部合并到當(dāng)前分支的分支
$ git branch --merged
 
# 顯示沒(méi)有合并到當(dāng)前分支的分支
$ git branch --no-merged

9. 遠(yuǎn)端分支

如果你在本地有一個(gè)分支希望推到遠(yuǎn)端服務(wù)器上,你可以用一行命令推送上去:

$ git push origin twitter-experiment:refs/heads/twitter-experiment
# origin是我們服務(wù)器的名字,而twitter-experiment是分支名字

更新:感謝Erlend在原博客文章上的評(píng)論 - 這個(gè)實(shí)際上和git push origin twitter-experiment效果一樣,不過(guò)使用完整的語(yǔ)法,你可以在兩者之間使用不同的分支名(這樣本地分支可以是add-ssl-support而遠(yuǎn)端是issue-1723)。

如果你想在遠(yuǎn)端服務(wù)器上刪除一個(gè)分支(注意分支名前面的冒號(hào)):

$ git push origin :twitter-experiment

如果你想查看所有遠(yuǎn)端分支的狀態(tài)可以這樣做:

$ git remote show origin

這個(gè)命令可能會(huì)列出服務(wù)器上一些以前有過(guò)但現(xiàn)在已經(jīng)不在了的分支。如果碰到這種情況你可以用下面的命令從你本地分支里清理掉:

$ git remote prune

最后,如果你想在本地跟蹤一個(gè)遠(yuǎn)端分支,普通的方式是:

$ git branch --track myfeature origin/myfeature
$ git checkout myfeature

不過(guò),新版的git在使用-b標(biāo)記檢出分支時(shí)會(huì)自動(dòng)設(shè)定跟蹤:

$ git checkout -b myfeature origin/myfeature

在儲(chǔ)藏點(diǎn),索引和文件系統(tǒng)中保存內(nèi)容

10. 儲(chǔ)藏

在git里你可以把當(dāng)前工作狀態(tài)放進(jìn)一個(gè)儲(chǔ)藏堆棧中,然后可以再取出來(lái)。最簡(jiǎn)單的情形是下面這樣:

$ git stash
# 做點(diǎn)其他事情...
$ git stash pop

許多人建議使用git stash apply來(lái)代替pop,不過(guò)如果這樣做的話最后會(huì)遺留一個(gè)很長(zhǎng)的儲(chǔ)藏列表。而“pop”會(huì)在全部加載后自動(dòng)從堆棧中移除。如果使用過(guò)git stash apply,你也可以使用下面的命令從堆棧上移除最后一項(xiàng):

$ git stash drop

git會(huì)基于當(dāng)前的提交信息自動(dòng)創(chuàng)建評(píng)論。如果你更希望有自定義信息的話(因?yàn)樗赡芎颓耙粋€(gè)提交沒(méi)有任何聯(lián)系):

$ git stash save "My stash message"

如果你希望從列表中取出一個(gè)特定的儲(chǔ)藏點(diǎn)(不一定非得是最后一個(gè))可以先列出它們?nèi)缓笥孟旅娴姆绞饺〕觯?/p>

$ git stash list
 stash@{0}: On master: Changed to German
 stash@{1}: On master: Language is now Italian
$ git stash apply stash@{1}

11. 交互式添加

在subversion的世界里你只能修改文件然后提交所有改動(dòng)。而在git里你有強(qiáng)大得多的方式來(lái)提交部分文件或者甚至是部分補(bǔ)丁。提交部分文件或文件中的部分改動(dòng)你需要進(jìn)入交互式模式:

$ git add -i
   staged  unstaged path
 
 
*** Commands ***
 1: status  2: update 3: revert 4: add untracked
 5: patch  6: diff  7: quit  8: help
What now> 

這會(huì)讓你進(jìn)入一個(gè)基于菜單的交互式提示。你可以使用命令中的數(shù)字或高亮的字母(如果你在終端里打開(kāi)了高亮的話)來(lái)進(jìn)入相應(yīng)的模式。然后就只是輸入你希望操作的文件的數(shù)字了(你可以使用這樣的格式,1或者1-4或2,4,7)。

如果你想進(jìn)入補(bǔ)丁模式(交互式模式下按‘p’或‘5’),你也可以直接進(jìn)入:

$ git add -p 
diff --git a/dummy.rb b/dummy.rb 
index 4a00477..f856fb0 100644 
--- a/dummy.rb
+++ b/dummy.rb
@@ -1,5 +1,5 @@
 class MyFoo
 def say
- puts "Annyong Haseyo"
+ puts "Guten Tag"
 end
 end
Stage this hunk [y,n,q,a,d,/,e,?]? 

你可以看到下方會(huì)有一些選項(xiàng)供選擇用來(lái)添加該文件的這個(gè)改動(dòng)、該文件的所有改動(dòng),等等。使用‘?’命令可以詳細(xì)解釋這些選項(xiàng)。

12. 從文件系統(tǒng)里保存/取回改動(dòng)

有些項(xiàng)目(比如Git項(xiàng)目本身)在git文件系統(tǒng)中直接保存額外文件而并沒(méi)有將它們加入到版本控制中。

讓我們從在git中存儲(chǔ)一個(gè)隨機(jī)文件開(kāi)始:

$ echo "Foo" | git hash-object -w --stdin
51fc03a9bb365fae74fd2bf66517b30bf48020cb 

這樣這個(gè)目標(biāo)文件就已經(jīng)保存到數(shù)據(jù)庫(kù)中了,但是如果你沒(méi)有設(shè)定一個(gè)指向它的指針的話它會(huì)被當(dāng)做垃圾回收。最簡(jiǎn)單的方式是設(shè)定一個(gè)標(biāo)簽:

$ git tag myfile 51fc03a9bb365fae74fd2bf66517b30bf48020cb

注意這里我們使用了標(biāo)簽myfile。當(dāng)我們需要使用這個(gè)文件的時(shí)候可以這樣做:

$ git cat-file blob myfile

這個(gè)對(duì)于一些工具文件很有用,開(kāi)發(fā)者可能會(huì)用到(密碼,GPG密鑰,等等)但是又不希望每次都檢出到硬盤(尤其是在實(shí)際工作中)。

日志以及有哪些改動(dòng)?

13. 查看日志

長(zhǎng)時(shí)間使用 Git 的話,不會(huì)沒(méi)用過(guò)‘git log’來(lái)查看最近的提交。不過(guò),有一些技巧來(lái)更好地應(yīng)用。比如,你可以使用下面的命令來(lái)查看每次提交的具體改動(dòng):

$ git log -p

或者你可以僅僅查看有哪些文件改動(dòng):

$ git log --stat

有個(gè)很不錯(cuò)的別名你可以試試,會(huì)顯示簡(jiǎn)短提交名和一個(gè)不錯(cuò)的分支圖并在一行里顯示提交信息(有點(diǎn)像gitk,但是是在命令行下):

$ git config --global alias.lol "log --pretty=oneline --abbrev-commit --graph --decorate"
$ git lol
* 4d2409a (master) Oops, meant that to be in Korean
* 169b845 Hello world

14. 搜索日志

如果你想找特定提交者可以這樣做:

$ git log --author=Andy

更新:感謝Johannes的評(píng)論,我已經(jīng)去掉了之前這里的一些有混淆的地方。

或者你想在提交信息里找一些相關(guān)字段:

$ git log --grep="Something in the message"

也有一個(gè)更強(qiáng)大的叫做pickaxe的命令用來(lái)查找包含了刪除或添加的某個(gè)特定內(nèi)容的提交(比如,該內(nèi)容第一次出現(xiàn)或被刪除)。這可以告訴你什么時(shí)候增加了一行(但這一行里的某個(gè)字符后面被改動(dòng)過(guò)就不行了):

$ git log -S "TODO: Check for admin status"

假如你改動(dòng)了一個(gè)特定的文件,比如lib/foo.rb

$ git log lib/foo.rb

比如說(shuō)你有一個(gè)feature/132分支和feature/145分支,然后你想看看這兩個(gè)分支上不在master分支里的提交(注意符號(hào)是不在的意思):

$ git log feature/132 feature/145 ^master

你也可以使用ActiveSupport格式的日期來(lái)縮小到某個(gè)日期范圍:

$ git log --since=2.months.ago --until=1.day.ago

默認(rèn)情況下會(huì)用OR來(lái)組合查詢,但你可以輕易地改為AND(如果你有超過(guò)一條的查詢標(biāo)準(zhǔn))

$ git log --since=2.months.ago --until=1.day.ago --author=andy -S "something" --all-match

15. 查看/修改版本

有很多方式可以用來(lái)引用一個(gè)版本,看你記得哪個(gè):

$ git show 12a86bc38 # 根據(jù)版本
$ git show v1.0.1 # 根據(jù)標(biāo)簽
$ git show feature132 # 根據(jù)分支名
$ git show 12a86bc38^ # 一次提交的父節(jié)點(diǎn)
$ git show 12a86bc38~2 # 一次提交的祖父節(jié)點(diǎn)
$ git show feature132@{yesterday} # 時(shí)間相關(guān)
$ git show feature132@{2.hours.ago} # 時(shí)間相關(guān)

注意和之前部分有些不同,末尾的的意思是該提交的父節(jié)點(diǎn) - 開(kāi)始位置的的意思是不在這個(gè)分支。

16. 選擇范圍

最簡(jiǎn)單的方式:

$ git log origin/master..new
# [old]..[new] - 所有你還沒(méi)有推送的提交

你也可以省略[new],將使用當(dāng)前的HEAD。

時(shí)光回溯和后悔藥

17. 重置改動(dòng)

如果你還沒(méi)有提交的話可以用下面的命令輕松地取消改動(dòng):

$ git reset HEAD lib/foo.rb

通常會(huì)使用‘unstage’的別名,因?yàn)樯厦娴目瓷先ビ行┎恢庇^。

$ git config --global alias.unstage "reset HEAD"
$ git unstage lib/foo.rb

如果你已經(jīng)提交了該文件,你可以做兩件事 - 如果是最后一次提交你還可以改正:

$ git commit --amend

這會(huì)取消最后一次提交,把工作分支回退到提交前標(biāo)記了所有改動(dòng)的狀態(tài),而且提交信息也都準(zhǔn)備好可以修改或直接提交。

如果你已經(jīng)提交過(guò)多次而且希望全部回退,你可以將分支重置到合適的位置。

$ git checkout feature132
$ git reset --hard HEAD~2

如果你實(shí)際上希望將分支指向一個(gè)完全不同的SHA1(也許你要將一個(gè)分支的HEAD替換到另一個(gè)分支,或者之后的某次提交)你可以使用下面的較長(zhǎng)的方式:

$ git checkout FOO
$ git reset --hard SHA

實(shí)際上有一個(gè)快速的方式(不需要先把你的工作分支切換到FOO再前進(jìn)到SHA):

$ git update-ref refs/heads/FOO SHA

18. 提交到了錯(cuò)誤的分支

好吧,假如說(shuō)你已經(jīng)提交到了master,但卻應(yīng)該創(chuàng)建一個(gè)叫experimental的主題分支更合適。要移動(dòng)這些改動(dòng),你可以在當(dāng)前位置創(chuàng)建分支,回退HEAD再檢出新分支:

$ git branch experimental # 創(chuàng)建一個(gè)指向當(dāng)前master的位置的指針
$ git reset --hard master~3 # 移動(dòng)master分支的指針到3個(gè)版本之前
$ git checkout experimental

如果你的改動(dòng)是在分支的分支的分支上會(huì)更復(fù)雜。那樣你需要做的是將分支基礎(chǔ)切換到其他地方:

$ git branch newtopic STARTPOINT
$ git rebase oldtopic --onto newtopic

19. 交互式切換基礎(chǔ)

這是一個(gè)我之前看過(guò)展示卻沒(méi)真正理解過(guò)的很贊的功能,現(xiàn)在覺(jué)得它就很簡(jiǎn)單了。假如說(shuō)你提交了3次但是你希望更改順序或編輯(或者合并):

$ git rebase -i master~3

然后這會(huì)啟動(dòng)你的編輯器并帶有一些指令。你所要做的就是修改這些指令來(lái)選擇/插入/編輯(或者刪除)提交和保存/退出。然后在編輯完后你可以用git rebase --continue命令來(lái)讓每一條指令生效。

如果你有修改,將會(huì)切換到你提交時(shí)所處的狀態(tài),之后你需要使用命令git commit --amend來(lái)編輯。

注意:在rebase的時(shí)候千萬(wàn)不要提交 - 只能先添加然后使用參數(shù)--continue,--skip或--abort。

20. 清理

如果你提交了一些內(nèi)容到你的分支(也許你從SVN導(dǎo)入了一些舊倉(cāng)庫(kù)),然后你希望把某個(gè)文件從歷史記錄中全部刪掉:

$ git filter-branch --tree-filter 'rm -f *.class' HEAD

如果你已經(jīng)推送到origin了,但之后提交了一些垃圾改動(dòng),你也可以在推送前在本地系統(tǒng)里這樣做:

$ git filter-branch --tree-filter 'rm -f *.class' origin/master..HEAD

其他技巧

21. 你查看過(guò)的前一個(gè)引用

如果你知道自己之前查看過(guò)一個(gè)SHA-1,但是隨后做了一些重置/回退的操作,你可以使用reflog命令來(lái)列出最近查看過(guò)的SHA-1記錄:

$ git reflog
$ git log -g # 和上面一樣,但是使用'log'格式輸出

22. 分支命名

一個(gè)可愛(ài)的小技巧 - 別忘了分支名并不限于a-z和0-9。名字中可以用/和.將非常方便用來(lái)建立偽命名空間或版本,例如:

$ # 生成版本132的改動(dòng)歷史
$ git shortlog release/132 ^release/131
$ # 貼上v1.0.1的標(biāo)簽
$ git tag v1.0.1 release/132

23. 找出誰(shuí)是兇手

通常找出來(lái)誰(shuí)改動(dòng)了某個(gè)文件里的某行代碼會(huì)很有用。實(shí)現(xiàn)這個(gè)功能的最簡(jiǎn)單命令是:

$ git blame FILE

有時(shí)候這些改動(dòng)來(lái)自其他文件(如果你合并了兩個(gè)文件,或者你移動(dòng)了某個(gè)函數(shù))所以你可以使用下面的命令:

$ # 顯示內(nèi)容來(lái)自哪個(gè)文件
$ git blame -C FILE

有時(shí)候通過(guò)點(diǎn)擊各個(gè)改動(dòng)然后回到很早很早以前來(lái)跟蹤改動(dòng)會(huì)很不錯(cuò)。有一個(gè)很好的內(nèi)建GUI命令來(lái)做這個(gè):

$ git gui blame FILE

24. 數(shù)據(jù)維護(hù)

通常git不需要經(jīng)常維護(hù),它把自己照顧的很好。不過(guò),你可以通過(guò)下面的命令查看數(shù)據(jù)統(tǒng)計(jì):

$ git count-objects -v

如果占用很多空間的話,你可以選擇在你的本地倉(cāng)庫(kù)做垃圾回收。這不會(huì)影響推送或其他人,卻會(huì)讓一些命令運(yùn)行更快而且減少空間占用:

$ git gc

經(jīng)常運(yùn)行完整性檢查也很有意義:

$ git fsck --full

你也可以在末尾加上--auto參數(shù)(如果你在服務(wù)器上通過(guò)crontab經(jīng)常/每天都運(yùn)行這個(gè)命令的話),然后它只會(huì)在必要的時(shí)候才執(zhí)行fsck動(dòng)作。

在檢查的時(shí)候,看到“dangling”或“unreachable”是正常的,通常這是由回退HEAD或切換基礎(chǔ)的結(jié)果。而看到“missing”或“sha1 mismatch”就不對(duì)了...找專業(yè)人士幫忙吧!

25. 恢復(fù)遺失的分支

如果你使用-D參數(shù)刪除了experimental分支,可以用下面的命令重新建立:

$ git branch experimental SHA1_OF_HASH

如果你最近訪問(wèn)過(guò)的話,你通??梢杂胓it reflog來(lái)找到SHA1哈希值。

另一種方式是使用git fsck —lost-found。其中一個(gè)dangling的提交就是丟失的HEAD(它只是已刪除分支的HEAD,而HEAD被引用為當(dāng)前的HEAD所以它并不處于dangling狀態(tài))

搞定!

哇,這是我寫過(guò)的最長(zhǎng)的一篇博客,我希望有人能覺(jué)得有用。如果你這么覺(jué)得,或者你有任何疑問(wèn)請(qǐng)?jiān)谠u(píng)論里留言讓我知道...

via: https://www.andyjeffries.co.uk/25-tips-for-intermediate-git-users/

作者:Andy Jeffries 譯者:zpl1025 校對(duì):wxy

本文由 LCTT 原創(chuàng)翻譯,Linux中國(guó) 榮譽(yù)推出

相關(guān)文章

  • Linux CentOS 定時(shí)運(yùn)行腳本配置的方法

    Linux CentOS 定時(shí)運(yùn)行腳本配置的方法

    今天小編就為大家分享一篇Linux CentOS 定時(shí)運(yùn)行腳本配置的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-06-06
  • Linux下使用killall命令終止進(jìn)程的8大用法實(shí)例詳解

    Linux下使用killall命令終止進(jìn)程的8大用法實(shí)例詳解

    Linux 的命令行提供很多命令來(lái)殺死進(jìn)程。這篇文章主要介紹了Linux下使用killall命令終止進(jìn)程的8大用法,需要的朋友可以參考下
    2019-04-04
  • Linux 添加開(kāi)機(jī)啟動(dòng)方法(服務(wù)/腳本)

    Linux 添加開(kāi)機(jī)啟動(dòng)方法(服務(wù)/腳本)

    這篇文章主要介紹了Linux 添加開(kāi)機(jī)啟動(dòng)方法(服務(wù)/腳本),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Linux漏洞掃描工具lynis使用方法解析

    Linux漏洞掃描工具lynis使用方法解析

    這篇文章主要介紹了Linux漏洞掃描工具lynis使用方法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • 詳解SSH如何配置key免密碼登錄

    詳解SSH如何配置key免密碼登錄

    這篇文章主要介紹了詳解SSH如何配置key免密碼登錄的相關(guān)資料,文中介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-03-03
  • 使用Apache?Hudi?加速傳統(tǒng)的批處理模式的方法

    使用Apache?Hudi?加速傳統(tǒng)的批處理模式的方法

    這篇文章主要介紹了Apache?Hudi?如何加速傳統(tǒng)的批處理模式,借助Apache Hudi,我們希望在將數(shù)據(jù)攝取到數(shù)據(jù)湖中的同時(shí),找到更好的重復(fù)數(shù)據(jù)刪除和數(shù)據(jù)版本控制優(yōu)化解決方案,需要的朋友可以參考下
    2022-04-04
  • Centos7 mysql數(shù)據(jù)庫(kù)安裝及配置實(shí)現(xiàn)教程

    Centos7 mysql數(shù)據(jù)庫(kù)安裝及配置實(shí)現(xiàn)教程

    這篇文章主要介紹了Centos7 mysql數(shù)據(jù)庫(kù)安裝及配置實(shí)現(xiàn)教程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • 詳解CentOS 6.4 添加永久靜態(tài)路由所有方法匯總

    詳解CentOS 6.4 添加永久靜態(tài)路由所有方法匯總

    這篇文章主要介紹了詳解CentOS 6.4 添加永久靜態(tài)路由所有方法匯總,非常具有實(shí)用價(jià)值,需要的朋友可以參考下。
    2016-12-12
  • CentOS6.5平臺(tái)上rsync服務(wù)器安裝配置方法簡(jiǎn)述

    CentOS6.5平臺(tái)上rsync服務(wù)器安裝配置方法簡(jiǎn)述

    這篇文章主要介紹了CentOS6.5平臺(tái)上rsync服務(wù)器安裝配置方法,結(jié)合實(shí)例形式分析了CentOS上安裝與配置rsync服務(wù)器的具體步驟、相關(guān)命令與使用方法,需要的朋友可以參考下
    2018-04-04
  • Linux上定位后臺(tái)服務(wù)偶發(fā)崩潰的解決方法

    Linux上定位后臺(tái)服務(wù)偶發(fā)崩潰的解決方法

    在本篇內(nèi)容中小編給大家整理的是一篇關(guān)于Linux上定位后臺(tái)服務(wù)偶發(fā)崩潰的解決方法,有需要的朋友們可以學(xué)習(xí)參考下。
    2020-11-11

最新評(píng)論