git checkout 会把改动带过去吗_原创 | 操作失误不要慌,这个命令给你的Git一次反悔的机会...
點(diǎn)擊上方藍(lán)字,關(guān)注并星標(biāo),和我一起學(xué)技術(shù)。
今天我們來(lái)介紹git當(dāng)中兩個(gè)非常非常好用的工具,git show和reflog。
這兩個(gè)命令雖然不是必知必會(huì),但是如果熟練使用可以極大地幫助我們查看代碼倉(cāng)庫(kù)的問題,以及在我們操作失誤的時(shí)候拯救我們。可以理解成應(yīng)急技能,一般情況下用不到,關(guān)鍵時(shí)候會(huì)的話可以救命的那種。
git show
首先來(lái)聊聊git show,它解決了我們?nèi)粘i_發(fā)場(chǎng)景當(dāng)中非常常見的一個(gè)問題,就是回看某一個(gè)提交的內(nèi)容。我們通過(guò)git log只能閱讀到commit的時(shí)候輸入的提示語(yǔ)。但有些開發(fā)者不遵守規(guī)范,或者是提示語(yǔ)寫得非常簡(jiǎn)略,我們很難get到其中的內(nèi)容,還是得需要手動(dòng)checkout過(guò)去查看內(nèi)容,這就非常的不方便。
而有了git show工具之后,我們可以直接通過(guò)git show命令查看到代碼層面的改動(dòng)。
git show接收一個(gè)參數(shù),表示具體的commit id,比如:
git?show?40a91193d那么git會(huì)自動(dòng)展示出這個(gè)commit下所有的改動(dòng)內(nèi)容:
這個(gè)大家都很好理解,但是有一個(gè)小問題,就是我們?cè)趺粗牢覀円吹奶峤坏膇d呢?所以我們需要先查到commit id,才能git show,否則盲目亂show一通也很花時(shí)間。
查找commit id,我們之前介紹過(guò),這里再簡(jiǎn)單提一下。一般來(lái)說(shuō)有兩種參數(shù)非常好用,第一種是--stat參數(shù),它可以列舉出每一個(gè)commit具體到文件級(jí)別的改動(dòng):
第二個(gè)參數(shù)是pretty=oneline,它可以將git的提交記錄壓縮成一行,方便我們快速查找提交時(shí)的備注。
我們之前介紹過(guò),在git實(shí)現(xiàn)的內(nèi)部,分支其實(shí)只是一個(gè)指向節(jié)點(diǎn)的指針。所以我們也可以用git show + 分支名的方法來(lái)查看某一個(gè)分支的改動(dòng),這樣查找出來(lái)的改動(dòng)是這個(gè)分支最后一個(gè)提交節(jié)點(diǎn)的。
比如:
git?show?test展示的就是test這個(gè)分支最后一個(gè)提交的改動(dòng),如果我們想要查看test分支倒數(shù)第二個(gè)節(jié)點(diǎn)的改動(dòng)呢?這就需要我們使用祖先引用了。我們之前也介紹過(guò),我們有兩種方法可以表示一個(gè)節(jié)點(diǎn)的祖先。第一種方法是使用^這個(gè)符號(hào),它表示某個(gè)節(jié)點(diǎn)的父節(jié)點(diǎn)。這個(gè)符號(hào)是可以重復(fù)引用的,比如我們要選擇倒數(shù)第三個(gè)節(jié)點(diǎn),就可以寫成test^^。
第二種方法就是使用~,它和^的意思是一樣,一樣表示父節(jié)點(diǎn),但是它可以后面跟一個(gè)數(shù)字表示嵌套。舉個(gè)例子,比如test^^它等價(jià)于test~2。
所以比如我們想要查看test分支倒數(shù)第三個(gè)節(jié)點(diǎn)的提交,我們只需要這樣就可以了:
git?show?test~3git reflog
今天我們要介紹的第二個(gè)功能叫做reflog,這是一個(gè)非常非常有用的功能,很多次救了我的命。
reflog是reference log的縮寫,含義是引用日志,它會(huì)記錄下HEAD節(jié)點(diǎn)和分支引用所指向的歷史。我們可以使用git reflog命令來(lái)查看引用日志:
簡(jiǎn)單解釋一下這個(gè)展示出來(lái)的日志,它最左側(cè)一列表示commit id。它的第二列表示的是分支,也就是這個(gè)提交屬于哪一個(gè)分支。第三列表示的是相對(duì)位置,也就是它相對(duì)于現(xiàn)在HEAD指針的位置。最后一列是信息,它記錄的是HEAD指針移動(dòng)的情況。
當(dāng)我們使用reset或者是checkout等命令的時(shí)候,都會(huì)在這里留下記錄。當(dāng)我們想要反悔了,我們可以通過(guò)reflog迅速找到正確的位置。
這個(gè)經(jīng)常出現(xiàn),比如我們checkout到了一個(gè)過(guò)去的節(jié)點(diǎn)查看了一些代碼,或者是使用了reset了過(guò)去的節(jié)點(diǎn)。當(dāng)你查看完了想要回去的時(shí)候,你會(huì)發(fā)現(xiàn)你回不去了。使用git log只會(huì)展示再之前的日志,因?yàn)間it log是以HEAD節(jié)點(diǎn)往前輸出的。所以這個(gè)時(shí)候我們就只能查看reflog,找到我們checkout過(guò)來(lái)的commit id,然后再通過(guò)checkout將HEAD指針移動(dòng)過(guò)去。
也就是說(shuō)reflog給了你一次后悔的機(jī)會(huì),這也是我們之前說(shuō)的,只要是提交過(guò)的代碼,一般情況下都不會(huì)丟失,因?yàn)槲覀冞€可以通過(guò)reflog進(jìn)行查找。
今天的文章就到這里,怎么樣,你學(xué)會(huì)了嗎?如果還喜歡今天的內(nèi)容的話,請(qǐng)來(lái)一個(gè)三連支持吧~(點(diǎn)贊、在看、轉(zhuǎn)發(fā))
- END -總結(jié)
以上是生活随笔為你收集整理的git checkout 会把改动带过去吗_原创 | 操作失误不要慌,这个命令给你的Git一次反悔的机会...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: swiper默认选中_Swiper
- 下一篇: msp430g2553串口接受数据_MS