具体描述
不管您的職業是不是工程師,只要你是電腦工作者每天或多或少都需要編輯、修改許多的檔案。
您怎麼樣備份您的檔案?您怎麼樣一眼就可以知道每次備份的差別?如果您跟其它同事一起共同檔案,不論是有心無意,萬一檔案被其它同事覆蓋掉了該怎麼救回來?
如果你在乎這些問題的答案,那使用「版本控制系統」就是一個很不錯的選擇。透過這樣的系統,可以清楚的記錄每個檔案是誰在什麼時候加進來、什麼時候被修改或刪除。Git 就是一種版本控制系統,也是目前業界最流行的版本控制系統,沒有之一。
人生不能重來,但 Git 可以隨時幫你救回來不小心修改或刪除的檔案。
簡單的說,Git 就像玩遊戲的時候可以儲存進度一樣。為了避免遊戲打輸了而損失裝備,又或是打倒頭目卻沒有掉落期望的裝備,你也許在每次要去執行任務之前之前記錄一下,在發生狀況的時候可以載入舊進度,再來挑戰一次。
若您平日的工作已有在使用 Git,本書大部份的內容應該相對的輕鬆;即使已經平日有在使用 Git,也可從本書學到一些「本來以為 Git 是這樣,但其實是那樣」的觀念。
本書內容:
- 常用 Git 指令介紹。
- 各種 Git 的常見問題及使用情境。
- 如何修改 Git 的歷史紀錄。
- 如何使用 GitHub 與其它人一起工作。
- 一般平常工作用不到但對觀念建立有幫助的冷知識。
作者简介
五倍紅寶石 高見龍
雖非資訊本科系出身,但喜歡寫程式而且希望可以寫一輩子程式的電腦阿宅。
喜歡辦活動,是不少台灣大型技術研討會(如 PHPConf、WebConf、RubyConf Taiwan 等)及社群活動(Rails Girls Taipei、Taipei.rb)的發起人或主辦人。
喜愛與人分享,曾在許多國內、外技術研討會分享心得。四次創業經驗,雖然其中有兩次是失敗經驗但仍樂此不疲。目前為五倍紅寶石共同創辦人及負責人。
- 20 年程式開發經驗
- 將近 10 年的教學經驗
- 在台灣推廣 Ruby 程式語言多年,在各大專院校廣為開課,學生已累積超過 1,000 人以上
Blog: kaochenlong.com
Facebook: www.facebook.com/eddiekao
Twitter: twitter.com/eddiekao
Github: github.com/kaochenlong
Email: eddie@5xruby.tw
插畫者簡介
陳曉菁
喜歡手作實踐一些小玩意,平常寫寫程式,偶爾弄弄設計煮煮飯,簡單來說就是有點手賤要找點事做,目前是五倍紅寶石的酒鬼,歡迎來礦坑乾杯。
?
目录信息
作者序
第1章:入門篇
1.1 什麼是Git?為什麼要學習它?
1.2 與其它版本控制系統的差異
第2章:環境安裝
2.1 安裝在 Windows 作業系統
2.2 安裝在Mac OSX 作業系統
2.3 安裝在Linux 作業系統
2.4 圖形化介面工具
第3章:終端機/命令提示字元
3.1 終端機及常用指令介紹
3.2 超簡明Vim操作介紹
第4章:設定Git
4.1 使用者設定
4.2 其它方便的設定
第5章:開始使用Git
5.1 新增、初始 Repository
5.2 把檔案交給Git 控管
5.3 工作區、暫存區與儲存庫
5.4 檢視紀錄
5.5 狀況題 如何在Git 裡刪除檔案或變更檔名?
5.6 狀況題 修改Commit 紀錄
5.7 狀況題 追加檔案到最近一次的Commit
5.8 狀況題 新增目錄?
5.9 狀況題 有些檔案我不想放在Git 裡面...
5.10 狀況題 檢視特定檔案的Commit 紀錄
5.11 狀況題 等等,這行程式誰寫的?
5.12 狀況題 啊!不小心把檔案或目錄刪掉了?
5.13 狀況題 剛才的Commit 後悔了,想要拆掉重做?
5.14 狀況題 不小心使用hard 模式Reset 了某個Commit,救得回來嗎?
5.15 冷知識 HEAD 是什麼東西?
5.16 狀況題 可以只Commit 一個檔案的部份的內容嗎?
5.17 冷知識 那個長得很像亂碼SHA-1 是怎麼算出來的?
5.18 超冷知識 在.git 目錄裡有什麼東西? Part 1
5.19 超冷知識 在.git 目錄裡有什麼東西? Part 2
第6章:使用分支
6.1 為什麼要使用分支?
6.2 開始使用分支
6.3 對分支的誤解
6.4 合併分支
6.5 狀況題 為什麼我的分支都沒有「小耳朵」?
6.6 常見問題合併過的分支要留著嗎?
6.7 狀況題 不小心把還沒合併的分支砍掉了,救得回來嗎?
6.8 另一種合併方式(使用 rebase)
6.9 合併發生衝突了,怎麼辦?
6.10 冷知識 為什麼大家都說在 Git 開分支「很便宜」?
6.11 冷知識 Git 怎麼知道現在是在哪一個分支?
6.12 狀況題 我可以從過去的某個Commit 再長一個新的分支出來嗎?
第7章:修改歷史紀錄
7.1 狀況題 修改歷史訊息
7.2 狀況題 把多個 Commit 合併成一個Commit
7.3 狀況題 把一個 Commit 拆解成多個Commit
7.4 狀況題 想要在某些 Commit 之間再加新的Commit
7.5 狀況題 想要刪除某幾個 Commit 或是調整Commit 的順序
7.6 Reset、Revert 跟 Rebase 指令有什麼差別?
第8章:標籤
8.1 使用標籤
8.2 冷知識 標籤跟分支有什麼不一樣?
第9章:其它常見狀況題與冷知識
9.1 狀況題 手邊的工作做到一半,臨時要切換到別的任務
9.2 狀況題 不小心把帳號密碼放在Git 裡了,想把它刪掉?
9.3 冷知識 怎麼樣把檔案真正的從 Git 裡移掉?
9.4 冷知識 你知道Git 有資源回收機制嗎?
9.5 冷知識 斷頭(detached HEAD)是怎麼一回事?
第10章:遠端共同協作 - 使用 GitHub
10.1 GitHub 是什麼?
10.2 Push 上傳到 GitHub
10.3 Pull 下載更新
10.4 狀況題 怎麼有時候推不上去...
10.5 從伺服器上取得 Repository
10.6 常見問題Clone 跟 Pull 指令有什麼不一樣?
10.7 與其它開發者的互動 - 使用 Pull Request(PR)
10.8 狀況題 怎麼跟上當初 fork 專案的進度?
10.9 狀況題 怎麼刪除遠端的分支?
10.10 狀況題 聽說 git push -f 這個指令很可怕,什麼情況可以使用它呢?
10.11 使用GitHub 免費製作個人網站
10.12 冷知識 一定要有GitHub 才能得到別人更新的檔案嗎?
第11章:使用Git flow
11.1 Git Flow 是什麼?為什麼需要這種東西?
· · · · · · (收起)
读后感
用户评价
**从“我不会Git”到“Git很简单”,心态的转变。** 我一直对Git有一种莫名的畏惧感。每次看到别人谈论Git,那些诸如“rebase”、“merge”、“cherry-pick”之类的词汇,就感觉像是在听天书。我曾经尝试过一些在线教程,但总是学了没多久就放弃了,因为它们要么过于技术化,要么缺少实践的指导,导致我始终停留在“知道Git很重要,但不知道如何用”的尴尬境地。直到我读了《為你自己學Git》,我才真正体会到,原来Git并没有想象中那么可怕,它甚至可以说是非常“人性化”的。这本书给我最大的感受就是“循序渐进”和“由浅入深”。作者并没有一开始就抛出一大堆复杂的概念,而是从最基础的“版本控制是什么”开始讲起,逐步引导读者理解Git的诞生背景和核心价值。书中对“仓库”、“暂存区”、“工作区”这些基本概念的解释,配合着生动的图示,让我能够清晰地看到Git内部文件的流动过程,理解Git是如何管理每一次的代码修改的。最令我惊喜的是,本书对“分支”的讲解,让我彻底打破了之前对分支的误解。作者用非常易于理解的方式,解释了分支的创建、切换、合并等操作,让我明白分支并非洪水猛兽,而是提高开发效率、促进团队协作的强大工具。我按照书中的例子,为项目创建了新的功能分支,并顺利地将其合并回主分支,整个过程比我预想的要顺畅得多。这本书不仅仅是教授Git命令,更是帮助我转变了学习心态,让我从“我不会Git”变成了“Git其实很简单”,这种心态的转变,比掌握任何一个具体的命令都重要。
**从“代码灾难”到“代码有序”,Git带来的秩序感。** 在没有接触《為你自己學Git》之前,我的代码管理方式可以用“混乱”来形容。每次完成一个功能,或者尝试一个新想法,总是在文件夹里创建各种版本的副本,诸如“final”、“final_v2”、“final_final”之类的命名,简直是开发过程中的一场“代码灾难”。每次想要回溯某个旧版本,或者进行功能回退,都像是在大海捞针,耗时耗力,而且充满了不确定性。这本书的出现,就像是一盏指路明灯,照亮了我之前混沌一片的代码管理之路。《為你自己學Git》并没有直接灌输复杂的命令,而是先从“为什么需要版本控制”这个根本问题讲起,让我深刻理解了Git存在的价值。书中对“仓库”、“提交”等基本概念的阐述,清晰明了,而且通过大量的图示和实际操作示例,让我能够直观地感受到Git是如何管理代码的。我尤其欣赏书中关于“分支”的讲解,它让我明白,我可以放心地在独立的分支上进行各种实验和开发,而不必担心影响到主线的代码。当我需要将新的功能整合到主线时,也能够通过“合并”操作,将不同分支上的代码进行融合。这让我摆脱了过去那种“一次性”开发模式的束缚,能够更灵活、更有序地进行开发。现在,我的项目拥有了清晰、可追溯的版本历史,每一次修改都有迹可循,当我需要回退到某个特定版本时,也能够轻松实现。这种“代码有序”的感觉,不仅大大提高了我的开发效率,更重要的是,它让我对自己的项目拥有了前所未有的掌控感。
**不再是“复制粘贴”式的学习,而是“理解”的升华。** 在我看来,学习任何一项技术,最怕的就是“复制粘贴”式的学习。你可能记住了几个命令,但一旦遇到稍微复杂一点的情况,或者需要解决一个非预设的场景,就瞬间卡壳。而《為你自己學Git》这本书,恰恰打破了这种“复制粘贴”的局限,它让我从“知道怎么做”上升到了“理解为什么这样做”。书中对Git工作原理的深入剖析,例如Git是如何存储和管理对象的,如何通过哈希值来保证数据的完整性,这些底层原理的讲解,虽然一开始可能有些挑战,但一旦理解了,就会发现Git的很多操作都变得顺理成章。我不再是死记硬背命令,而是理解了命令背后的逻辑,这样即使在遇到一些不常见的场景,我也能够根据已有的知识,推导出解决问题的方法。书中对“rebase”和“merge”的对比讲解,让我深刻理解了它们各自的优缺点以及适用的场景,这让我能够更明智地选择合并策略,避免不必要的麻烦。此外,书中关于“远程仓库”的介绍,也让我从本地开发迈向了更广阔的协作平台,例如GitHub。我能够理解如何克隆仓库、如何推送和拉取代码、如何处理多人协作时的冲突,这些都极大地拓展了我的开发视野。这本书的价值在于,它不仅仅教会了我Git的使用技巧,更重要的是,它教会了我如何去“思考”Git,如何去“理解”Git,让我真正掌握了这项技术,而不是被技术所掌握。
**初学者的福音,Git的“启蒙者”。** 对于一个完全没有接触过版本控制工具的初学者来说,Git无疑是一个让人望而生畏的庞然大物。我曾经尝试过一些在线的Git教程,但总感觉那些内容过于零散,缺乏一个系统性的框架,导致我学了几天就感到迷茫,最终不了了之。直到我遇到了《為你自己學Git》,我才真正找到了属于我的Git“启蒙者”。这本书用非常平实、易懂的语言,从最基本的概念讲起,循序渐进地带领我走进了Git的世界。它就像一位耐心的老师,会仔细地解释每一个术语,用生动的比喻来帮助理解抽象的概念。我尤其喜欢书中对“提交”这个概念的阐述,它不再只是一个简单的“保存”按钮,而是被赋予了“记录项目历史”、“保存项目状态”的深刻意义。通过大量的实际操作示例,我能够亲手去创建一个仓库、进行代码提交、查看提交历史,每一步操作都让我对Git有了更深入的认识。书中对“分支”的讲解,更是让我眼前一亮。我一直认为分支是高级用户的专属,但这本书让我明白,分支其实是Git最基本、最核心的功能之一,它能够帮助我们更安全、更高效地进行开发。通过学习书中关于分支的创建、切换和合并,我感觉自己仿佛打开了新的开发思路。这本书最大的成功之处在于,它让我摆脱了对Git的恐惧,让我发现,原来Git也可以如此有趣和易于掌握。对于所有想要入门Git的读者来说,这本书绝对是一个不可错过的选择。
**理论与实践的完美融合,学习Git的新高度。** 对于一个在编程领域摸爬滚打多年的老兵来说,接触新技术的学习曲线往往是陡峭的。而Git,作为现代软件开发不可或缺的基石,我一直以来都抱着一种“敬畏”的态度去学习。然而,市面上大部分的Git教程,要么过于理论化,要么过于碎片化,很难形成一个完整、连贯的学习体系。直到我遇到了《為你自己學Git》,它给我的感觉是,作者真正站在读者的角度,去思考如何才能让一个初学者或者一个对Git感到困惑的人,能够真正理解并掌握它。书中对Git核心概念的剖析,比如“提交对象”、“树对象”以及它们之间的关系,虽然涉及到一定的底层原理,但作者用非常形象的比喻和清晰的图示,将这些抽象的概念具象化,让我不再因为那些“晦涩”的术语而头疼。更重要的是,本书并非纸上谈兵,它紧密结合了实际操作,每一个概念的引入,都会伴随着相应的实践指导,让你能够立刻动手尝试,并在实践中加深理解。我特别喜欢书中关于“合并冲突”的讲解,这绝对是Git学习过程中最让人头疼的环节之一,但作者用多种场景下的冲突解决案例,详细地展示了如何分析问题、如何进行有效的沟通和协作,这让我感觉在遇到实际冲突时,心中已经有了一套完整的应对策略。而且,书中并没有止步于基础的本地操作,而是将目光投向了更广阔的远程协作场景,比如GitHub、GitLab等平台的常用操作,以及团队协作的最佳实践。这让我意识到,Git不仅仅是一个工具,更是一种高效的协作模式。通过这本书的学习,我发现自己不仅能够熟练地运用Git进行代码管理,更重要的是,我开始理解Git背后的设计哲学,能够根据实际需求,灵活地运用Git解决各种问题。
**告别“单打独斗”,迎接“团队协作”的利器。** 在没有系统学习Git之前,我的开发模式基本是“单打独斗”。即使有时需要和同事协作,也常常通过邮件发送代码,或者使用一些简单的共享文件夹,这种方式不仅效率低下,而且容易出现版本混乱,甚至代码覆盖的问题。接触《為你自己學Git》之后,我才真正体会到Git在团队协作中的强大力量。这本书不仅仅讲解了Git的基础命令,更重要的是,它将Git的应用场景延展到了多人协作的层面。书中详细介绍了如何使用远程仓库,例如GitHub,如何进行代码的推送(push)和拉取(pull),以及如何有效地处理代码冲突。这些内容对于我来说,简直是“及时雨”。我开始尝试使用Git与我的团队成员进行协作,我们创建了共同的远程仓库,每个人都可以独立地在自己的分支上开发,然后通过“Pull Request”(或称Merge Request)的方式,将自己的代码提交给团队进行评审和合并。这个过程不仅大大提高了我们的开发效率,更重要的是,它让我们能够清晰地追踪每一段代码的来源和修改者,保证了代码的质量和可追溯性。书中关于“代码冲突”的讲解,也让我不再害怕在多人协作时遇到的问题,我能够理解冲突的产生原因,并且能够有条不紊地解决它们。通过这本书的学习,我感觉自己从一个孤立的开发者,变成了一个能够融入高效团队协作的成员,Git已经成为了我们团队不可或缺的“利器”。
**告别Git的“黑魔法”,拥抱透明的控制力。** 我一直觉得自己是个“代码洁癖”的人,写出来的代码总是希望能保持整洁、可追溯。然而,在没有掌握Git之前,每一次迭代都伴随着对旧版本的担忧,手动备份文件,或者在文件夹里命名各种“final”、“final_v2”、“final_really”……这种混乱的状态,不仅效率低下,更让人对代码的演进过程感到一丝无力。接触《為你自己學Git》这本书,可以说是彻底改变了我对代码管理的认知。《為你自己學Git》并没有把Git描绘成一个高深莫测的“黑魔法”,而是将其还原为一个清晰、透明、易于理解的工具。它让我明白,Git的每一个操作,背后都有明确的逻辑和清晰的流程。书中对于“HEAD”、“index”、“working directory”这些基本概念的解释,让我第一次真正理解了Git内部的工作机制,知道我的代码究竟去了哪里,又将如何被管理。最让我印象深刻的是,书中对“提交”的解读,它不再是简单的“保存”,而是记录了代码在某个时间点的“快照”,以及这次快照的“故事”——提交信息。这让我开始重视提交信息的撰写,将每一次提交都看作是项目发展的一个重要节点,清晰的提交历史,就像是一本详细的项目日记,随时可以翻阅,了解项目的每一个变化。我尝试着按照书中的指导,对一个小型项目进行了多次修改和提交,当我需要回退到某个特定版本时,不再是盲目地去猜测哪个文件是正确的,而是可以直接通过Git命令,轻松地找到并恢复。这本书的神奇之处在于,它让你从一个被动的使用者,变成一个主动的掌控者,你不再害怕Git,而是能够自信地驾驭它,让它成为你手中强大的利器,帮助你更有条理、更高效地管理你的项目。
**从零开始,Git不再是拦路虎!** 一直以来,Git就像是一个高高在上的神明,听闻过它的威名,也知道它对于现代软件开发的重要性,但真正着手去学习时,总感觉云里雾里,那些复杂的命令和概念,像是刻意设置的迷宫,让人望而却步。直到我偶然翻开了《為你自己學Git》,才真正打破了这种隔阂。这本书并非那种照本宣科、枯燥乏味的教程,它更像是一位经验丰富的引路人,用平实易懂的语言,循序渐进地带领我一步步深入Git的世界。初学者最容易遇到的问题,比如如何初始化一个仓库、如何提交代码、如何回退版本,书中都用非常贴近实际的例子进行了讲解,甚至连一些看似微不足道的细节,比如`git status`命令的妙用,也描绘得淋漓尽致。我尤其欣赏书中对“提交”这个概念的阐述,它不再仅仅是一个简单的动作,而是被赋予了“记录时间节点”、“保存项目状态”的深刻意义,这让我重新认识到版本控制的价值。而且,书中并没有一开始就堆砌大量术语,而是先建立起对Git基本工作流程的直观理解,再逐步引入更高级的概念。我尝试着按照书中的步骤,在本地搭建了几个小项目,每一次提交,每一次查看历史,都感觉自己对代码的掌控力在不断增强,这种成就感是前所未有的。我之前一直觉得“分支”是个很玄乎的东西,觉得它只会让事情变得更复杂,但看完相关章节后,我才恍然大悟,原来分支才是Git最强大的武器之一,它极大地解放了我的开发思维,让我敢于尝试新的功能,而不必担心破坏现有稳定版本。这本书的优点在于,它不是教你死记硬背命令,而是教你理解命令背后的逻辑,让你真正“为自己学Git”,而不是为完成某个任务而学。
**如同量身定制,Git学习的“Eureka”时刻。** 我想,很多人和我一样,在面对Git时,总会有一种“当局者迷”的感觉。你知道它很重要,你知道它能解决很多问题,但具体要怎么做,用什么命令,在什么场景下用什么命令,却总是含糊不清。我在学习《為你自己學Git》之前,也曾有过类似的困扰。这本书给我的感觉,就像是为我量身定制的Git入门指南。它没有故作高深,没有堆砌晦涩的术语,而是用一种非常接地气的方式,把我带入了Git的世界。书中对Git核心概念的讲解,特别是对“commit”这个动作的深度解析,让我明白了每一次提交不仅仅是一个简单的“保存”动作,而是一个记录项目演进过程中的重要“时间点”和“状态”。作者通过大量的实例,展示了如何撰写清晰有意义的提交信息,这对于日后回顾项目历史,追溯问题根源,有着至关重要的作用。我尤其喜欢书中关于“日志”的章节,它让我第一次看到了一个清晰、完整的项目演进脉络,不再是杂乱无章的文件堆叠,而是每一个阶段的清晰记录。而且,书中对“撤销修改”和“版本回退”的讲解,让我告别了过去那种战战兢兢、生怕弄坏代码的心理。现在,我能够自信地进行各种操作,知道无论发生什么,我都可以轻松地回到之前的某个状态。这本书最大的价值在于,它让我产生了一个又一个的“Eureka”时刻,让我恍然大悟,原来Git是这样运作的!原来Git可以这样用!这种学习体验,让我对Git的掌握,不再是停留在表面的命令记忆,而是真正内化为解决问题的能力。
**知识体系的“补齐”,Git的系统化学习。** 我相信,对于很多开发者而言,Git的学习过程往往是碎片化的,我们在需要某个功能时,去搜索相应的命令,解决了问题,也就停止了深入的探索。这种“按需学习”的方式,虽然能在短时间内解决燃眉之急,但往往难以形成一个完整的知识体系。而《為你自己學Git》这本书,恰恰弥补了我在Git知识体系上的“短板”。它提供了一个系统、完整的Git学习框架,从最基础的概念,到核心的工作流程,再到进阶的操作和团队协作,都进行了详细的讲解。书中对“版本控制”的起源和发展,以及Git的设计理念的阐述,让我能够从宏观上理解Git的价值和重要性。我尤其喜欢书中对Git内部数据结构和工作原理的深入探讨,比如Git是如何通过对象(blob, tree, commit)来管理文件和版本的,如何使用SHA-1哈希值来确保数据的完整性和唯一性。这些底层知识的学习,让我对Git的理解不再停留在表面,而是能够更深入地掌握其工作机制。这本书就像是在我脑海中搭建了一个清晰的Git知识框架,让我在学习过程中,能够将零散的知识点有机地连接起来,形成一个完整的知识体系。通过这本书的学习,我不再害怕遇到陌生的Git命令或场景,因为我知道,我已经拥有了理解和解决问题的底层逻辑和框架。
https://gitbook.tw/
https://gitbook.tw/
https://gitbook.tw/
https://gitbook.tw/
https://gitbook.tw/