git reset和git checkout詳解(摘之Pro-git)

在繼續(xù)了解更專(zhuān)業(yè)的工具前入愧,我們先討論一下 reset 與 checkout。 在你初次遇到的 Git 命令中嗤谚,這兩個(gè)是最 讓人困惑的棺蛛。 它們能做很多事情,所以看起來(lái)我們很難真正地理解并恰當(dāng)?shù)剡\(yùn)用它們巩步。 針對(duì)這一點(diǎn)旁赊,我們先來(lái) 做一個(gè)簡(jiǎn)單的比喻。

三棵樹(shù)

理解 reset 和 checkout 的最簡(jiǎn)方法椅野,就是以 Git 的思維框架(將其作為內(nèi)容管理器)來(lái)管理三棵不同的樹(shù)彤恶。 “樹(shù)” 在我們這里的實(shí)際意思是 “文件的集合”钞钙,而不是指特定的數(shù)據(jù)結(jié)構(gòu)。 (在某些情況下索引看起來(lái)并不 像一棵樹(shù)声离,不過(guò)我們現(xiàn)在的目的是用簡(jiǎn)單的方式思考它芒炼。)
Git 作為一個(gè)系統(tǒng),是以它的一般操作來(lái)管理并操縱這三棵樹(shù)的:

樹(shù) 用途
HEAD 上一次提交的快照术徊,下一次提交的父結(jié)點(diǎn)
Index 預(yù)期的下一次提交的快照
Working Directory 沙盒
HEAD

HEAD 是當(dāng)前分支引用的指針本刽,它總是指向該分支上的最后一次提交。 這表示 HEAD 將是下一次提交的父結(jié) 點(diǎn)赠涮。 通常子寓,理解 HEAD 的最簡(jiǎn)方式,就是將它看做 你的上一次提交 的快照笋除。
其實(shí)斜友,查看快照的樣子很容易。 下例就顯示了 HEAD 快照實(shí)際的目錄列表垃它,以及其中每個(gè)文件的 SHA-1 校驗(yàn) 和:

$ git cat-file -p HEAD
tree cfda3bf379e4f8dba8717dee55aab78aef7f4daf
author Scott Chacon  1301511835 -0700
committer Scott Chacon  1301511835 -0700
initial commit
$ git ls-tree -r HEAD
100644 blob a906cb2a4a904a152...
100644 blob 8f94139338f9404f2...
040000 tree 99f1a6d12cb4b6f19...
README
Rakefile
lib

cat-file 與 ls-tree 是底層命令鲜屏,它們一般用于底層工作,在日常工作中并不使用国拇。不過(guò)它們能幫助我們了 解到底發(fā)生了什么

Index

索引是你的 預(yù)期的下一次提交洛史。 我們也會(huì)將這個(gè)概念引用為 Git 的 “暫存區(qū)域”,這就是當(dāng)你運(yùn)行 git
commit 時(shí) Git 看起來(lái)的樣子酱吝。
Git 將上一次檢出到工作目錄中的所有文件填充到索引區(qū)也殖,它們看起來(lái)就像最初被檢出時(shí)的樣子。 之后你會(huì)將其
中一些文件替換為新版本务热,接著通過(guò)git commit將它們轉(zhuǎn)換為樹(shù)來(lái)用作新的提交忆嗜。

 $ git ls-files -s
100644 a906cb2a4a904a152e80877d4088654daad0c859 0
100644 8f94139338f9404f26296befa88755fc2598c289 0
100644 47c6340d6459e05787f644c2447d2595f5d3a54b 0
README
Rakefile
lib/simplegit.rb

再說(shuō)一次,我們?cè)谶@里又用到了 ls-files 這個(gè)幕后的命令崎岂,它會(huì)顯示出索引當(dāng)前的樣子捆毫。 確切來(lái)說(shuō),索引并非技術(shù)上的樹(shù)結(jié)構(gòu)该镣,它其實(shí)是以扁平的清單實(shí)現(xiàn)的。不過(guò)對(duì)我們而言响谓,把它當(dāng)做樹(shù)就夠了损合。

Working Directory

最后,你就有了自己的工作目錄娘纷。 另外兩棵樹(shù)以一種高效但并不直觀的方式嫁审,將它們的內(nèi)容存儲(chǔ)在 .git 文件夾 中。 工作目錄會(huì)將它們解包為實(shí)際的文件以便編輯赖晶。 你可以把工作目錄當(dāng)做 沙盒律适。在你將修改提交到暫存區(qū)并 記錄到歷史之前辐烂,可以隨意更改。

 $ tree
.
├── README 
├── Rakefile 
└── lib
         └── simplegit.rb 
1 directory, 3 files

工作流程

Git 主要的目的是通過(guò)操縱這三棵樹(shù)來(lái)以更加連續(xù)的狀態(tài)記錄項(xiàng)目的快照捂贿。



讓我們來(lái)可視化這個(gè)過(guò)程:假設(shè)我們進(jìn)入到一個(gè)新目錄纠修,其中有一個(gè)文件。 我們稱(chēng)其為該文件的 v1 版本厂僧,將它 標(biāo)記為藍(lán)色扣草。 現(xiàn)在運(yùn)行 git init,這會(huì)創(chuàng)建一個(gè) Git 倉(cāng)庫(kù)颜屠,其中的 HEAD 引用指向未創(chuàng)建的分支(master 還 不存在)辰妙。



此時(shí),只有工作目錄有內(nèi)容甫窟。
現(xiàn)在我們想要提交這個(gè)文件密浑,所以用git add來(lái)獲取工作目錄中的內(nèi)容,并將其復(fù)制到索引中粗井。
2.png

接著運(yùn)行g(shù)it commit尔破,它會(huì)取得索引中的內(nèi)容并將它保存為一個(gè)永久的快照,然后創(chuàng)建一個(gè)指向該快照的提 交對(duì)象背传,最后更新 master 來(lái)指向本次提交呆瞻。


3.png

此時(shí)如果我們運(yùn)行g(shù)it status,會(huì)發(fā)現(xiàn)沒(méi)有任何改動(dòng)径玖,因?yàn)楝F(xiàn)在三棵樹(shù)完全相同痴脾。
現(xiàn)在我們想要對(duì)文件進(jìn)行修改然后提交它。 我們將會(huì)經(jīng)歷同樣的過(guò)程;首先在工作目錄中修改文件梳星。 我們稱(chēng)其 為該文件的 v2 版本赞赖,并將它標(biāo)記為紅色。
4.png

如果現(xiàn)在運(yùn)行 git status冤灾,我們會(huì)看到文件顯示在 “Changes not staged for commit,” 下面并被標(biāo)記為紅 色前域,因?yàn)樵摋l目在索引與工作目錄之間存在不同。 接著我們運(yùn)行 git add 來(lái)將它暫存到索引中韵吨。
5.png

此時(shí)匿垄,由于索引和 HEAD 不同,若運(yùn)行 git status 的話(huà)就會(huì)看到 “Changes to be committed” 下的該文件 變?yōu)榫G色——也就是說(shuō)归粉,現(xiàn)在預(yù)期的下一次提交與上一次提交不同椿疗。最后,我們運(yùn)行g(shù)it commit來(lái)完成提 交糠悼。
6.png

現(xiàn)在運(yùn)行g(shù)it status會(huì)沒(méi)有輸出届榄,因?yàn)槿脴?shù)又變得相同了。

切換分支或克隆的過(guò)程也類(lèi)似倔喂。 當(dāng)檢出一個(gè)分支時(shí)铝条,它會(huì)修改 HEAD 指向新的分支引用靖苇,將 索引 填充為該次提
交的快照,然后將 索引 的內(nèi)容復(fù)制到 工作目錄中班缰。

重置的作用

在以下情景中觀察 reset 命令會(huì)更有意義贤壁。
為了演示這些例子,假設(shè)我們?cè)俅涡薷牧?file.txt 文件并第三次提交它鲁捏。 現(xiàn)在的歷史看起來(lái)是這樣的:


7.png

讓我們跟著 reset 看看它都做了什么芯砸。 它以一種簡(jiǎn)單可預(yù)見(jiàn)的方式直接操縱這三棵樹(shù)。 它做了三個(gè)基本操作给梅。

第 1 步:移動(dòng) HEAD

reset 做的第一件事是移動(dòng) HEAD 的指向假丧。 這與改變 HEAD 自身不同(checkout 所做的);reset 移動(dòng) HEAD 指向的分支。 這意味著如果 HEAD 設(shè)置為 master 分支(例如动羽,你正在 master 分支上)包帚,運(yùn)行 git reset 9e5e64a將會(huì)使master指向9e5e64a。


8.png

無(wú)論你調(diào)用了何種形式的帶有一個(gè)提交的 reset运吓,它首先都會(huì)嘗試這樣做渴邦。 使用 reset --soft,它將僅僅停 在那兒拘哨。
現(xiàn)在看一眼上圖谋梭,理解一下發(fā)生的事情:它本質(zhì)上是撤銷(xiāo)了上一次 git commit 命令。 當(dāng)你在運(yùn)行 git commit 時(shí)倦青,Git 會(huì)創(chuàng)建一個(gè)新的提交瓮床,并移動(dòng) HEAD 所指向的分支來(lái)使其指向該提交。 當(dāng)你將它 reset 回 HEAD~(HEAD 的父結(jié)點(diǎn))時(shí)产镐,其實(shí)就是把該分支移動(dòng)回原來(lái)的位置隘庄,而不會(huì)改變索引和工作目錄。 現(xiàn)在你可以 更新索引并再次運(yùn)行g(shù)it commit來(lái)完成git commit --amend所要做的事情了(見(jiàn)修改最后一次提交)癣亚。

第 2 步:更新索引(--mixed)

注意丑掺,如果你現(xiàn)在運(yùn)行g(shù)it status的話(huà),就會(huì)看到新的HEAD和以綠色標(biāo)出的它和索引之間的區(qū)別述雾。
接下來(lái)街州,reset 會(huì)用 HEAD 指向的當(dāng)前快照的內(nèi)容來(lái)更新索引。


9.png

如果指定 --mixed 選項(xiàng)玻孟,reset 將會(huì)在這時(shí)停止唆缴。 這也是默認(rèn)行為,所以如果沒(méi)有指定任何選項(xiàng)(在本例中只 是git reset HEAD~)取募,這就是命令將會(huì)停止的地方琐谤。
現(xiàn)在再看一眼上圖蟆技,理解一下發(fā)生的事情:它依然會(huì)撤銷(xiāo)一上次 提交玩敏,但還會(huì) 取消暫存 所有的東西斗忌。 于是,我 們回滾到了所有g(shù)it add和git commit的命令執(zhí)行之前旺聚。

第 3 步:更新工作目錄(--hard)

reset 要做的的第三件事情就是讓工作目錄看起來(lái)像索引织阳。 如果使用 --hard 選項(xiàng),它將會(huì)繼續(xù)這一步砰粹。


10.png

現(xiàn)在讓我們回想一下剛才發(fā)生的事情唧躲。你撤銷(xiāo)了最后的提交、git add和git commit命令以及工作目錄中的 所有工作碱璃。
必須注意弄痹,--hard 標(biāo)記是 reset 命令唯一的危險(xiǎn)用法,它也是 Git 會(huì)真正地銷(xiāo)毀數(shù)據(jù)的僅有的幾個(gè)操作之一嵌器。 其他任何形式的 reset 調(diào)用都可以輕松撤消肛真,但是 --hard 選項(xiàng)不能,因?yàn)樗鼜?qiáng)制覆蓋了工作目錄中的文件爽航。 在這種特殊情況下蚓让,我們的 Git 數(shù)據(jù)庫(kù)中的一個(gè)提交內(nèi)還留有該文件的 v3 版本,我們可以通過(guò) reflog 來(lái)找回 它讥珍。但是若該文件還未提交历极,Git 仍會(huì)覆蓋它從而導(dǎo)致無(wú)法恢復(fù)。

回顧

reset 命令會(huì)以特定的順序重寫(xiě)這三棵樹(shù)衷佃,在你指定以下選項(xiàng)時(shí)停止:

  1. 移動(dòng) HEAD 分支的指向 (若指定了 --soft趟卸,則到此停止)
  2. 使索引看起來(lái)像 HEAD (若未指定 --hard,則到此停止)
  3. 使工作目錄看起來(lái)像索引

通過(guò)路徑來(lái)重置

前面講述了 reset 基本形式的行為纲酗,不過(guò)你還可以給它提供一個(gè)作用路徑衰腌。 若指定了一個(gè)路徑,reset 將會(huì)跳 過(guò)第 1 步觅赊,并且將它的作用范圍限定為指定的文件或文件集合右蕊。 這樣做自然有它的道理,因?yàn)?HEAD 只是一個(gè) 指針吮螺,你無(wú)法讓它同時(shí)指向兩個(gè)提交中各自的一部分饶囚。 不過(guò)索引和工作目錄 可以部分更新,所以重置會(huì)繼續(xù)進(jìn) 行第 2鸠补、3 步萝风。
現(xiàn)在,假如我們運(yùn)行g(shù)it reset file.txt(這其實(shí)是git reset --mixed HEAD file.txt的簡(jiǎn)寫(xiě)形 式紫岩,因?yàn)槟慵葲](méi)有指定一個(gè)提交的 SHA-1 或分支规惰,也沒(méi)有指定 --soft 或 --hard),它會(huì):

  1. 移動(dòng) HEAD 分支的指向 (已跳過(guò))
  2. 讓索引看起來(lái)像 HEAD (到此處停止)
    所以它本質(zhì)上只是將 file.txt 從 HEAD 復(fù)制到索引中泉蝌。


    11.png

    它還有 取消暫存文件 的實(shí)際效果歇万。 如果我們查看該命令的示意圖揩晴,然后再想想 git add 所做的事,就會(huì)發(fā)現(xiàn)它們正好相反贪磺。


    12.png

    這就是為什么 git status 命令的輸出會(huì)建議運(yùn)行此命令來(lái)取消暫存一個(gè)文件硫兰。 (查看 取消暫存的文件 來(lái)了 解更多。)
    我們可以不讓 Git 從 HEAD 拉取數(shù)據(jù)寒锚,而是通過(guò)具體指定一個(gè)提交來(lái)拉取該文件的對(duì)應(yīng)版本劫映。 我們只需運(yùn)行類(lèi)似 于git reset eb43bf file.txt的命令即可。
    13.png

    它其實(shí)做了同樣的事情刹前,也就是把工作目錄中的文件恢復(fù)到v1版本泳赋,運(yùn)行g(shù)it add添加它,然后再將它恢復(fù) 到 v3 版本(只是不用真的過(guò)一遍這些步驟)喇喉。 如果我們現(xiàn)在運(yùn)行 git commit摹蘑,它就會(huì)記錄一條“將該文件恢 復(fù)到 v1 版本”的更改,盡管我們并未在工作目錄中真正地再次擁有它轧飞。
    還有一點(diǎn)同 git add 一樣衅鹿,就是 reset 命令也可以接受一個(gè) --patch 選項(xiàng)來(lái)一塊一塊地取消暫存的內(nèi)容。 這 樣你就可以根據(jù)選擇來(lái)取消暫存或恢復(fù)內(nèi)容了过咬。

檢出

最后大渤,你大概還想知道 checkout 和 reset 之間的區(qū)別。 和 reset 一樣掸绞,checkout 也操縱三棵樹(shù)泵三,不過(guò)它 有一點(diǎn)不同,這取決于你是否傳給該命令一個(gè)文件路徑衔掸。

不帶路徑

運(yùn)行g(shù)it checkout [branch]與運(yùn)行g(shù)it reset --hard [branch]非常相似烫幕,它會(huì)更新所有三棵樹(shù)使
其看起來(lái)像 [branch],不過(guò)有兩點(diǎn)重要的區(qū)別敞映。
首先不同于reset --hard较曼,checkout對(duì)工作目錄是安全的,它會(huì)通過(guò)檢查來(lái)確保不會(huì)將已更改的文件弄 丟振愿。 其實(shí)它還更聰明一些捷犹。它會(huì)在工作目錄中先試著簡(jiǎn)單合并一下,這樣所有還未修改過(guò)的文件都會(huì)被更 新冕末。 而 reset --hard 則會(huì)不做檢查就全面地替換所有東西萍歉。
第二個(gè)重要的區(qū)別是如何更新 HEAD。 reset 會(huì)移動(dòng) HEAD 分支的指向档桃,而 checkout 只會(huì)移動(dòng) HEAD 自身來(lái) 指向另一個(gè)分支枪孩。
例如,假設(shè)我們有 master 和 develop 分支,它們分別指向不同的提交;我們現(xiàn)在在 develop 上(所以 HEAD 指向它)蔑舞。 如果我們運(yùn)行 git reset master丛晌,那么 develop 自身現(xiàn)在會(huì)和 master 指向同一個(gè)提 交。 而如果我們運(yùn)行 git checkout master 的話(huà)斗幼,develop 不會(huì)移動(dòng),HEAD 自身會(huì)移動(dòng)抚垄。 現(xiàn)在 HEAD 將 會(huì)指向 master蜕窿。
所以,雖然在這兩種情況下我們都移動(dòng) HEAD 使其指向了提交 A呆馁,但做法是非常不同的桐经。 reset 會(huì)移動(dòng) HEAD 分支的指向,而 checkout 則移動(dòng) HEAD 自身浙滤。

14.png

帶路徑

運(yùn)行 checkout 的另一種方式就是指定一個(gè)文件路徑阴挣,這會(huì)像 reset 一樣不會(huì)移動(dòng) HEAD。 它就像 git reset [branch] file那樣用該次提交中的那個(gè)文件來(lái)更新索引纺腊,但是它也會(huì)覆蓋工作目錄中對(duì)應(yīng)的文件畔咧。 它就像是git reset --hard [branch] file(如果reset允許你這樣運(yùn)行的話(huà))-這樣對(duì)工作目錄并不 安全,它也不會(huì)移動(dòng) HEAD揖膜。
此外誓沸,同git reset和git add一樣,checkout也接受一個(gè)--patch選項(xiàng)壹粟,允許你根據(jù)選擇一塊一塊地 恢復(fù)文件內(nèi)容拜隧。

總結(jié)

希望你現(xiàn)在熟悉并理解了 reset 命令,不過(guò)關(guān)于它和 checkout 之間的區(qū)別趁仙,你可能還是會(huì)有點(diǎn)困惑洪添,畢竟不 太可能記住不同調(diào)用的所有規(guī)則。
下面的速查表列出了命令對(duì)樹(shù)的影響雀费。 “HEAD” 一列中的 “REF” 表示該命令移動(dòng)了 HEAD 指向的分支引 用干奢,而`‘HEAD’' 則表示只移動(dòng)了 HEAD 自身。 特別注意 WD Safe? 一列 - 如果它標(biāo)記為 NO盏袄,那么運(yùn)行該命 令之前請(qǐng)考慮一下律胀。

HEAD Index Workdir WD Safe?
Commit Level
reset --soft [commit] REF NO NO YES
reset [commit] REF YES NO YES
reset --hard [commit] REF YES YES NO
checkout [commit] HEAD YES YES YES
File Level
reset (commit) [file] NO YES NO YES
checkout (commit) [file] NO YES YES NO
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市貌矿,隨后出現(xiàn)的幾起案子炭菌,更是在濱河造成了極大的恐慌,老刑警劉巖逛漫,帶你破解...
    沈念sama閱讀 212,599評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件黑低,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)克握,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,629評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)蕾管,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人菩暗,你說(shuō)我怎么就攤上這事掰曾。” “怎么了停团?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,084評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵旷坦,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我佑稠,道長(zhǎng)秒梅,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,708評(píng)論 1 284
  • 正文 為了忘掉前任舌胶,我火速辦了婚禮捆蜀,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘幔嫂。我一直安慰自己辆它,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,813評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布履恩。 她就那樣靜靜地躺著娩井,像睡著了一般。 火紅的嫁衣襯著肌膚如雪似袁。 梳的紋絲不亂的頭發(fā)上洞辣,一...
    開(kāi)封第一講書(shū)人閱讀 50,021評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音昙衅,去河邊找鬼扬霜。 笑死,一個(gè)胖子當(dāng)著我的面吹牛而涉,可吹牛的內(nèi)容都是我干的著瓶。 我是一名探鬼主播,決...
    沈念sama閱讀 39,120評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼啼县,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼材原!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起季眷,我...
    開(kāi)封第一講書(shū)人閱讀 37,866評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤余蟹,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后子刮,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體威酒,經(jīng)...
    沈念sama閱讀 44,308評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡窑睁,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,633評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了葵孤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片担钮。...
    茶點(diǎn)故事閱讀 38,768評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖尤仍,靈堂內(nèi)的尸體忽然破棺而出箫津,到底是詐尸還是另有隱情,我是刑警寧澤宰啦,帶...
    沈念sama閱讀 34,461評(píng)論 4 333
  • 正文 年R本政府宣布苏遥,位于F島的核電站,受9級(jí)特大地震影響绑莺,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜惕耕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,094評(píng)論 3 317
  • 文/蒙蒙 一纺裁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧司澎,春花似錦欺缘、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,850評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至蛤铜,卻和暖如春嫩絮,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背围肥。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,082評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工剿干, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人穆刻。 一個(gè)月前我還...
    沈念sama閱讀 46,571評(píng)論 2 362
  • 正文 我出身青樓置尔,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親氢伟。 傳聞我的和親對(duì)象是個(gè)殘疾皇子榜轿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,666評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容

  • 目錄 Git 筆記系列(一)—— Git簡(jiǎn)介 Git 筆記系列(二)—— Git工作流程 Git 筆記系列(三)—...
    吃蘑菇De大灰狼閱讀 1,195評(píng)論 0 3
  • 1. GIT命令 git init在本地新建一個(gè)repo,進(jìn)入一個(gè)項(xiàng)目目錄朵锣,執(zhí)行g(shù)it init谬盐,會(huì)初始化一個(gè)re...
    江邊一蓑煙閱讀 793評(píng)論 0 0
  • 一、基本概念: 注:對(duì)于git的分布式概念及其優(yōu)點(diǎn)诚些,不重復(fù)說(shuō)明设褐,自己百度或谷歌。本文中涉及到指令前面有$的,在cm...
    大廠offer閱讀 1,415評(píng)論 0 3
  • 簡(jiǎn)介 Git是一個(gè)開(kāi)源的分布式版本控制系統(tǒng)助析,用于敏捷高效地處理任何或小或大的項(xiàng)目犀被。 Git 與常用的版本控制工具 ...
    閩越布衣閱讀 2,737評(píng)論 0 18
  • 我興奮地跑向他,他卻往前走了一步外冀。 莫名其妙地寡键,我停住了。 他也覺(jué)得很奇怪雪隧。 我們西轩,相對(duì)無(wú)言。 他先走過(guò)...
    三木世子閱讀 249評(píng)論 1 1