本書以簡單、直觀、形象的方式教授Git,讓你對(duì)Git版本控制的工作原理建立深刻的感性認(rèn)識(shí)。通過顏色、情景和實(shí)踐練習(xí),你定能信心滿滿,學(xué)會(huì)使用這個(gè)工具。本書循序漸進(jìn),你不會(huì)陷入未知術(shù)語或概念的困境。本書涵蓋以下內(nèi)容:下載Git,初始化本地倉庫。把文件添加到暫存區(qū)域并進(jìn)行提交。創(chuàng)建、切換和刪除分支。合并和變基分支。使用遠(yuǎn)程倉庫,包括克隆、推送、拉取和獲取。使用拉取請求與他人協(xié)作。
這是一本非常有趣、易于理解且非常全面的指南,定能讓你熟練掌握Git知識(shí)。
Robert C. Martin (Uncle Bob)
軟件工匠、《代碼整潔之道》作者
Anna寫了一本Git社區(qū)需要的書。無論你喜歡什么樣的學(xué)習(xí)方式,這本書都能讓你學(xué)會(huì)Git。
Ben Straub
開發(fā)者、《精通Git》作者之一
前言我從未想過寫一本教授Git 的書。但是,經(jīng)歷一些事情之后,我幸運(yùn)地發(fā)現(xiàn)一個(gè)創(chuàng)意,能以簡單的方式教授這項(xiàng)技術(shù)。在一個(gè)Web 開發(fā)編程訓(xùn)練營中,我第一次聽說Git。訓(xùn)練營的老師向?qū)W生們簡單介紹了Git,可惜所有項(xiàng)目都是單獨(dú)完成的,沒有必要深入使用Git。編程訓(xùn)練營結(jié)束后,我找到一份初級(jí)前端開發(fā)工作,在一家大公司開發(fā)網(wǎng)站。我真正的Git 學(xué)習(xí)之旅從這份新工作的第一天就開始了。前幾個(gè)月,作為一家大公司團(tuán)隊(duì)的一員,我膽戰(zhàn)心驚。每當(dāng)我需要使用Git 做一些看似極其復(fù)雜的事情時(shí),我都害怕自己會(huì)破壞倉庫,或者造成不可收拾的局面。為了順利與同事共事,我決定系統(tǒng)自學(xué)Git。但是我很快發(fā)現(xiàn),網(wǎng)上的資源大多不適合初學(xué)者。掌握基礎(chǔ)知識(shí)后,我漸漸構(gòu)思一個(gè)想法,借助豐富的色彩,以簡單的視覺化方式教授這項(xiàng)技術(shù)。最終,我創(chuàng)建了一門在線課程,發(fā)布到網(wǎng)上。在制作這門課程的過程中,腦海深處又浮現(xiàn)一個(gè)想法:有一天我還要寫一本書。我的課程收到很多正面反饋。終于,在2021 年夏天,我決定是時(shí)候開始寫書了。你現(xiàn)在閱讀的這本書就是這個(gè)決定的產(chǎn)物,希望它對(duì)你的Git 學(xué)習(xí)之旅有所幫助!目標(biāo)讀者本書適合想要學(xué)習(xí)Git 工作原理基礎(chǔ)知識(shí)的人。它專為剛剛開始學(xué)習(xí)技術(shù)技能的人或擔(dān)任非技術(shù)角色但需要使用Git 與技術(shù)同事協(xié)作的人而設(shè)計(jì)?赡苁芤嬗诒緯娜税ǎǖ幌抻冢┚幊逃(xùn)練營的學(xué)生、計(jì)算機(jī)科學(xué)學(xué)生、技術(shù)作家、產(chǎn)品經(jīng)理、設(shè)計(jì)師、初級(jí)開發(fā)人員、數(shù)據(jù)科學(xué)家和自學(xué)的程序員。本書為沒有Git 經(jīng)驗(yàn)以及有少量Git 經(jīng)驗(yàn)的人而寫。如果你沒有Git 經(jīng)驗(yàn),那也不是問題,因?yàn)楸緯鴱牧汩_始講授,涵蓋安裝Git 和使用命令行。如果你已經(jīng)有一些使用Git 或命令行的經(jīng)驗(yàn),第1 章權(quán)當(dāng)復(fù)習(xí)。不過,建議你不要跳過第1 章,因?yàn)槟且徽聦⒃O(shè)置貫穿本書的Rainbow 項(xiàng)目。內(nèi)容概述本書理實(shí)結(jié)合,你需要在自己的計(jì)算機(jī)中練習(xí),鞏固所學(xué)的Git 基本概念。本書貫穿兩個(gè)項(xiàng)目:Rainbow 項(xiàng)目和Book 項(xiàng)目。Rainbow 是一個(gè)實(shí)踐項(xiàng)目,意在練習(xí)所學(xué)的知識(shí)。這是一個(gè)簡化的項(xiàng)目,僅用于學(xué)習(xí)。Book 是一個(gè)虛構(gòu)的項(xiàng)目,我用它演示如何把Git 的某些功能用到更真實(shí)的項(xiàng)目中。下面深入介紹一下兩個(gè)項(xiàng)目,順便說說本書的內(nèi)容編排。[ 備注 ]前言有一些你還不熟悉的術(shù)語,例如倉庫和提交。不要擔(dān)心,我將在接下來的章節(jié)解釋所有概念。Rainbow 項(xiàng)目我們將通過Rainbow 項(xiàng)目學(xué)習(xí)Git 基礎(chǔ)知識(shí)。為了循序漸進(jìn),你應(yīng)該逐章閱讀第1 章到第12 章,并在自己的計(jì)算機(jī)中完成每一道練習(xí)。例如,第4 章中的練習(xí)假定你已經(jīng)完成第1 章、第2 章和第3 章中的練習(xí)。倉庫根本而言,倉庫是Git 項(xiàng)目的副本。首先,為了開發(fā)Rainbow 項(xiàng)目,你將創(chuàng)建一個(gè)名為rainbow 的本地倉庫。隨后(在第7 章),你將創(chuàng)建一個(gè)名為rainbowremote的遠(yuǎn)程倉庫。最后,第8 章模擬與朋友合作開發(fā)Rainbow 項(xiàng)目,再創(chuàng)建一個(gè)名為friend-rainbow 的本地倉庫。從第8 章開始,每當(dāng)提到你的朋友做某事時(shí),你都必須在friend-rainbow 倉庫中執(zhí)行相關(guān)操作。[ 備注 ]當(dāng)我說到Rainbow(首字母大寫)項(xiàng)目時(shí),我指的是整個(gè)項(xiàng)目:從一個(gè)倉庫開始,最終包含三個(gè)倉庫。當(dāng)我提到rainbow 項(xiàng)目目錄或rainbow倉庫時(shí)(首字母小寫),我指的是Rainbow 項(xiàng)目中特定的本地倉庫。提交在Rainbow 項(xiàng)目中,你將創(chuàng)建和編輯文件,列出構(gòu)成一道彩虹的顏色,以及一些其他顏色。這并不是應(yīng)由Git 控制的真實(shí)項(xiàng)目,而是一個(gè)簡化的項(xiàng)目,目的是讓你專注于學(xué)習(xí),而不分心構(gòu)建復(fù)雜的功能。在整本書中,我將使用圖表說明Rainbow 項(xiàng)目中發(fā)生的事情。每次向Rainbow項(xiàng)目添加一個(gè)顏色,你都要向倉庫發(fā)起一次提交(commit)。一個(gè)提交基本上代表項(xiàng)目的一個(gè)版本。在圖表中,提交由添加的顏色繪制的圓圈表示,提交的名稱也使用顏色的名稱。例如,將要添加到Rainbow 項(xiàng)目中的第一個(gè)顏色是紅色(red),因此代表該提交的圓圈將被涂成紅色,我們將其稱為red 提交。為了照顧色覺缺失的讀者,我將在圖表中注上提交的名稱(或名稱的縮寫)。圖1 是紅色提交的圖表示例。附錄鑒于本書的編排方式,你應(yīng)該從第1 章?第12 章依次閱讀,但是在某些情況下,你可能希望或需要從特定的章節(jié)開始。例如:?? 你已經(jīng)完成了整本書中的練習(xí),想從特定的章節(jié)開始復(fù)習(xí)。?? 前一章的 Rainbow 項(xiàng)目出現(xiàn)了問題,你無法解決,想從新的一章重新開始。遇到這種情況,你可以參照附錄A 中的說明重新創(chuàng)建Rainbow 項(xiàng)目,達(dá)到某一章開頭的狀態(tài)。附錄B 涵蓋每一章介紹的命令,作為快速參考指南。附錄C 說明本書圖表使用的視覺語言。Book 項(xiàng)目Book 是一個(gè)虛構(gòu)項(xiàng)目,我用它演示在更真實(shí)的項(xiàng)目中如何使用Git。這個(gè)項(xiàng)目假設(shè)我在寫一本書,使用Git 對(duì)文件進(jìn)行版本控制。這本書由10 個(gè)章節(jié)組成,對(duì)應(yīng)10 個(gè)文本文件,一章一個(gè):chapter_one.txt、chapter_two.txt 等。有時(shí),我也會(huì)模擬與合著者和(或)編輯一起參與圖書項(xiàng)目的情況。這些討論放在Book示例項(xiàng)目插注部分。Book 項(xiàng)目不是我們的關(guān)注重點(diǎn)。我只是通過它進(jìn)一步演示和說明Git 的某些功能。除了Book 示例項(xiàng)目插注之外,本書還有一些其他插注。下面具體說明。書中的插注下面簡要說明本書中的幾種插注。Book 示例項(xiàng)目如前所述,Book 示例項(xiàng)目插注基于Book 項(xiàng)目提供其他Git 功能和命令的說明和示例。跟我做跟我做插注列出你應(yīng)在計(jì)算機(jī)中執(zhí)行的步驟。步驟中的粗體命令必須在命令行中輸入并執(zhí)行。有輸出的命令都會(huì)提供示例輸出。給出的輸出基于我在寫作本書時(shí)開發(fā)的Rainbow 項(xiàng)目,由macOS 操作系統(tǒng)生成,不過在Microsoft Windows 中的輸出應(yīng)該是相同的。如果Microsoft Windows 和macOS 的輸出差異巨大,我會(huì)在文中指出。命令一覽命令一覽插注介紹有用的命令,其中一些命令在跟我做插注中有用到。附錄B 還提供了按章節(jié)分組的所有重要命令的完整列表,作為參考。圖解圖解插注通過圖表說明Rainbow 項(xiàng)目中發(fā)生的事情。這種插注(以及插圖)用到兩個(gè)重要圖表:Git 圖和倉庫圖。Git 圖在第2 章介紹,倉庫圖從第4 章開始使用。書中的每個(gè)圖表都是一步步得來的,文中有相應(yīng)說明。附錄C 還提供了書中使用的視覺語言的概述,作為參考。備注備注插注提供與正文相關(guān)的有用信息。配套倉庫我的目標(biāo)是在本書中提供學(xué)習(xí)Git 所需的大部分信息,但有些技術(shù)和流程變化頻繁,無法在書中記錄。我在GitHub 中創(chuàng)建了公開倉庫Learning Git(https://github.com/gitlearningjourney/learning-git),提供相關(guān)技術(shù)和流程的最新信息。除此之外,該倉庫還包含:?? 下載 Git 的說明。?? 使用托管服務(wù)的資源鏈接。?? 為了訪問遠(yuǎn)程倉庫,對(duì) HTTPS 或 SSH 的設(shè)置。需要查閱Learning Git 倉庫獲得更多指導(dǎo)時(shí),我會(huì)在書中指出。這不是一本什么樣的書這不是一本參考書,不涵蓋每一個(gè)Git 命令(相信我,特別多)。這也不是一份Git 高級(jí)指南。許多Git 功能在本書中沒有討論,因?yàn)樗鼈儗?duì)于我想教你的基本操作不是必需的。書中涵蓋的功能經(jīng)過我的精心挑選。我的目標(biāo)是讓你對(duì)Git 基礎(chǔ)知識(shí)建立清晰的感性認(rèn)知,為繼續(xù)學(xué)習(xí)其他功能奠定堅(jiān)實(shí)的基礎(chǔ)。本書也不會(huì)告訴你應(yīng)該使用什么樣的Git 工作流程,或者應(yīng)該如何使用Git 的各項(xiàng)功能。我盡可能避免發(fā)表個(gè)人見解,而是專注于教你認(rèn)識(shí)工具。至于如何使用工具,根據(jù)每個(gè)人的背景和偏好,各有不同。本書盡量不約束你的選擇。例如,你可以使用自己喜歡的任何文本編輯器或托管服務(wù)完成書中的練習(xí)。章節(jié)編排本書分為兩個(gè)邏輯部分。第一部分(第1~5 章)學(xué)習(xí)在自己的計(jì)算機(jī)中操作本地倉庫。第6~12 章還將學(xué)習(xí)使用托管服務(wù)和遠(yuǎn)程倉庫。下面簡要介紹每一章的內(nèi)容。?? 第 1 章為使用 Git 管理項(xiàng)目做好準(zhǔn)備:安裝 Git,學(xué)習(xí)一些命令行基礎(chǔ)知識(shí),設(shè)置Git,為本書后面用到的項(xiàng)目創(chuàng)建目錄,以及準(zhǔn)備文本編輯器。?? 第2章把項(xiàng)目目錄變成Git倉庫。我將介紹表示Git不同區(qū)域的Git圖,包括工作目錄、暫存區(qū)域、提交歷史和本地倉庫。本章末尾將在項(xiàng)目目錄中創(chuàng)建第一個(gè)文件。?? 第 3 章學(xué)習(xí)并執(zhí)行在本地倉庫中進(jìn)行首次提交的兩個(gè)主要步驟。?? 第 4 章學(xué)習(xí)分支,了解分支是什么、如何創(chuàng)建分支、如何切換分支,以及如何判斷所在的分支。?? 第 5 章學(xué)習(xí)兩種合并,執(zhí)行快進(jìn)合并。?? 第 6 章為使用遠(yuǎn)程倉庫做準(zhǔn)備,首先選擇托管服務(wù),然后設(shè)置身份驗(yàn)證信息,通過HTTPS 或SSH 連接遠(yuǎn)程倉庫。?? 第 7 章討論使用本地和遠(yuǎn)程倉庫的不同方法。你將學(xué)習(xí)如何創(chuàng)建遠(yuǎn)程倉庫和上傳數(shù)據(jù)。?? 第 8 章開始模擬與其他人一起處理 Git 項(xiàng)目。為此,你要?jiǎng)?chuàng)建第二個(gè)本地倉庫,假裝它屬于你的朋友。這位朋友在自己的計(jì)算機(jī)中與你一道開發(fā)Rainbow 項(xiàng)目。在此過程中,你將學(xué)習(xí)如何克隆遠(yuǎn)程倉庫和獲取數(shù)據(jù)。?? 第 9 章執(zhí)行三方合并,學(xué)習(xí)獲取數(shù)據(jù)和拉取數(shù)據(jù)之間的區(qū)別。?? 第 10 章通過一個(gè)示例說明如何解決三方合并中的沖突。?? 第 11 章學(xué)習(xí)變基。這是把一個(gè)分支的改動(dòng)整合到另一個(gè)分支的第二種方式(第一種是合并)。?? 第12章學(xué)習(xí)拉取請求(也叫合并請求)及其對(duì)Git項(xiàng)目協(xié)作的促進(jìn)。?? 本書還有三篇附錄,內(nèi)容見附錄一節(jié)。排版約定本書使用以下排版約定。斜體(Italic)表示新術(shù)語、URL、電子郵件地址和重點(diǎn)。等寬字體(Constant width)表示命令、命令輸出、文件名、目錄名、分支名、倉庫名和其他屏上文本。等寬粗體(Constant width bold)表示應(yīng)由用戶鍵入或輸入的命令或其他文本。帶尖括號(hào)的等寬字體()表示應(yīng)替換為用戶提供的值或根據(jù)上下文確定的值的文本。OReilly 在線學(xué)習(xí)平臺(tái)(OReilly Online Learning)近40 年來,OReilly Media 致力于提供技術(shù)和商業(yè)培訓(xùn)、知識(shí)和卓越見解,來幫助眾多公司取得成功。公司獨(dú)有的專家和改革創(chuàng)新者網(wǎng)絡(luò)通過OReilly 書籍、文章以及在線學(xué)習(xí)平臺(tái),分享他們的專業(yè)知識(shí)和實(shí)踐經(jīng)驗(yàn)。OReilly 在線學(xué)習(xí)平臺(tái)按照您的需要提供實(shí)時(shí)培訓(xùn)課程、深入學(xué)習(xí)渠道、交互式編程環(huán)境以及來自O(shè)Reilly 和其他200 多家出版商的大量書籍與視頻資料。更多信息,請?jiān)L問網(wǎng)站:https://www.oreilly.com/。聯(lián)系我們?nèi)魏斡嘘P(guān)本書的意見或疑問,請按照以下地址聯(lián)系出版社。美國:OReilly Media, Inc.1005 Gravenstein Highway NorthSebastopol, CA 95472中國:北京市西城區(qū)西直門南大街2 號(hào)成銘大廈C 座807 室(100035)奧萊利技術(shù)咨詢(北京)有限公司勘誤、示例和其他信息,請?jiān)L問https://oreil.ly/learning-git 獲取。要了解更多OReilly 圖書和課程信息,請?jiān)L問http://oreilly.com。我們的LinkedIn:http://linkedin.com/company/oreilly-media。我們的Twitter:http://twitter.com/oreillymedia。我們的YouTube:http://youtube.com/oreillymedia。致謝感謝在本書寫作過程中支持我的所有人。感謝我的朋友和家人,其中一些人被迫成為本書早期版本的測試讀者。感謝在這個(gè)創(chuàng)意項(xiàng)目實(shí)施過程中給予我支持的整個(gè)OReilly 團(tuán)隊(duì)。感謝所有技術(shù)審校和測試讀者,謝謝你們一遍遍閱讀,向我提供寶貴的反饋意見。對(duì)了,還要感謝我的伴侶耐心守候,因?yàn)檫@本書的出版日期一再推遲。
Anna Skoulikari是一位創(chuàng)意人士,她利用自己的溝通技巧娓娓道來,以簡單、形象和可視化的方式教授Git。她通過各種媒介教授Git,包括評(píng)價(jià)很高的在線課程。她的技術(shù)工作經(jīng)驗(yàn)豐富,曾擔(dān)任用戶體驗(yàn)設(shè)計(jì)師、前端開發(fā)人員和技術(shù)作家。
目錄
[ 前言] 1
[ 第1 章] Git 和命令行. 11
1.1 Git 是什么 11
1.2 圖形用戶界面和命令行 .13
1.3 打開命令行窗口 13
1.4 在命令行中執(zhí)行命令 15
1.5 安裝Git .18
1.6 命令選項(xiàng)和參數(shù) 19
1.7 清除命令行 19
1.8 打開文件系統(tǒng)窗口 20
1.9 操作目錄 21
1.10 關(guān)閉命令行 29
1.11 設(shè)置Git 配置 29
1.12 準(zhǔn)備文本編輯器 .32
1.13 集成式終端 32
1.14 小結(jié) 33
[ 第2 章] 本地倉庫. 35
2.1 當(dāng)前情況 35
2.2 倉庫簡介 36
2.3 初始化本地倉庫 36
2.4 Git 的區(qū)域 40
2.5 為 Git 項(xiàng)目添加文件 45
2.6 小結(jié) .47
[ 第3 章 ] 發(fā)起提交 49
3.1 當(dāng)前情況 49
3.2 為什么要提交 .50
3.3 提交的兩個(gè)步驟 50
3.4 查看提交列表 .58
3.5 小結(jié) .60
[ 第4 章] 分支. 61
4.1 本地倉庫的狀態(tài) 61
4.2 為什么使用分支 63
4.3 未修改文件和已修改文件 67
4.4 在分支中提交 .70
4.5 創(chuàng)建分支 74
4.6 HEAD 是什么 .76
4.7 切換分支 78
4.8 在另一個(gè)分支中工作 81
4.9 小結(jié) .83
[ 第5 章] 合并. 85
5.1 本地倉庫的狀態(tài) 85
5.2 合并簡介 86
5.3 合并的類型 87
5.4 執(zhí)行快進(jìn)合并 .93
5.5 檢出提交 .105
5.6 創(chuàng)建并切換到新分支 110
5.7 小結(jié) 111
[ 第6 章] 托管服務(wù)和身份驗(yàn)證113
6.1 托管服務(wù)和遠(yuǎn)程倉庫 114
6.2 設(shè)置托管服務(wù)賬戶 . 114
6.3 設(shè)置身份驗(yàn)證憑據(jù) . 115
6.4 小結(jié) 118
[ 第7 章] 創(chuàng)建并推送到遠(yuǎn)程倉庫119
7.1 本地倉庫的狀態(tài) . 119
7.2 開始Git 項(xiàng)目的兩種方式 120
7.3 本地和遠(yuǎn)程倉庫之間的交互 .122
7.4 為什么使用遠(yuǎn)程倉庫 122
7.5 創(chuàng)建遠(yuǎn)程倉庫并上傳數(shù)據(jù) .124
7.6 直接在托管服務(wù)中處理遠(yuǎn)程倉庫 138
7.7 小結(jié) 139
[ 第8 章] 克隆和獲取141
8.1 本地倉庫和遠(yuǎn)程倉庫的狀態(tài) .141
8.2 克隆遠(yuǎn)程倉庫 142
8.3 刪除分支 .151
8.4 Git 協(xié)作和分支 154
8.5 整合遠(yuǎn)程倉庫的改動(dòng) 162
8.6 刪除分支(續(xù)) .167
8.7 小結(jié) 169
[ 第9 章] 三方合并171
9.1 本地倉庫和遠(yuǎn)程倉庫的狀態(tài) .171
9.2 三方合并的重要性 .173
9.3 設(shè)定三方合并情景 .177
9.4 定義上游分支 178
9.5 在提交之間多次編輯同一個(gè)文件 182
9.6 與其他人同時(shí)處理不同的文件 190
9.7 三方合并實(shí)踐 194
9.8 從遠(yuǎn)程倉庫中拉取改動(dòng) 201
9.9 本地倉庫和遠(yuǎn)程倉庫的狀態(tài) .205
9.10 小結(jié) 205
[ 第10 章] 合并沖突.207
10.1 本地倉庫和遠(yuǎn)程倉庫的狀態(tài) 207
10.2 合并沖突簡介 209
10.3 如何解決合并沖突 210
10.4 設(shè)置合并沖突場景 211
10.5 解決合并沖突的流程 .217
10.6 解決合并沖突實(shí)踐 220
10.7 與遠(yuǎn)程倉庫保持更新 .223
10.8 同步倉庫 224
10.9 本地倉庫和遠(yuǎn)程倉庫的狀態(tài) 227
10.10 小結(jié) .227
[ 第11 章] 變基.229
11.1 本地倉庫和遠(yuǎn)程倉庫的狀態(tài) 229
11.2 在Git 中集成改動(dòng) 231
11.3 變基的作用何在 232
11.4 設(shè)置變基示例 236
11.5 取消暫存和暫存文件 .238
11.6 準(zhǔn)備變基 250
11.7 變基過程的五個(gè)階段 .252
11.8 變基和合并沖突 257
11.9 變基分支實(shí)踐 258
11.10 變基的黃金法則 .263
11.11 同步倉庫 266
11.12 本地倉庫和遠(yuǎn)程倉庫的狀態(tài) 269
11.13 小結(jié) .269
[ 第12 章] 拉取請求(合并請求).271
12.1 本地倉庫和遠(yuǎn)程倉庫的狀態(tài) 271
12.2 拉取請求簡介 273
12.3 托管服務(wù)細(xì)節(jié) 274
12.4 為什么使用拉取請求 .275
12.5 了解如何合并拉取請求 277
12.6 準(zhǔn)備發(fā)起拉取請求 280
12.7 定義上游分支更簡單的方法 283
12.8 在托管服務(wù)中創(chuàng)建拉取請求 286
12.9 審核和批準(zhǔn)拉取請求 .287
12.10 合并拉取請求 .288
12.11 刪除遠(yuǎn)程分支 .290
12.12 同步并清理本地倉庫 291
12.13 本地倉庫和遠(yuǎn)程倉庫的狀態(tài) 295
12.14 小結(jié) .296
[ 結(jié)語] 297
[ 附錄A] 章節(jié)前需設(shè)置.299
[ 附錄B] 命令速查表.327
[ 附錄C] 視覺語言參考.331