隨著這幾年 GitHub 的流行,Git 已經是一個程序員逃不過的技術項,但很多人卻紛紛倒在了學習它的路上。而且,出於工作原因而不得不用 Git 的人,有不少在工作中對 Git 也是能不用就不用,生怕哪個命令用錯就把公司的代碼庫毀掉了。而那些對 Git 掌握得比較好的少數人,就像團隊中的神一樣,在同事遇到 Git 相關的問題的時候用各種風騷操作來拯救隊友于水火。
學不會、學不好 Git 的人,其實多數並不是不願意學。很多人都會嘗試去網上找 Git 教程、去社區請教高手、在公司諮詢同事,但轉了一大圈下來,依然沒有搞懂,甚至有可能越來越糊塗。
- 你剛才輸入的這個 Git 指令是什麼意思?
- 意思是 XXX。
- 可你上次跟我說它的意思是 YYY 啊?
- 嗯對,不同的場景不同的用法,上次是 YYY。
- ……好吧。另外你上次幫我解決這個問題用的是另一個指令 zzz 啊?
- 嗯對,那個也能解決,但這次用這個指令更適合,因為 @#¥@%*&。
- ……
- 懂了嗎?不懂的話還可以問我,沒事的。
- ……
Git 學習到底難在哪?
Git 的學習曲線很不友好:想上手很容易,只要學會 commit、push、pull 等幾個指令,就能夠初步地使用它;但如果想要更進一步,讓自己能夠在團隊項目中和朋友或同事自由合作,卻又很難。
「Git 好難啊!」不會用 Git 和會用 Git 的人都這麼說。
那麼 Git 到底難在哪呢?
其實關鍵在於一點:概念。
Git 的概念,是由一套完整的思維邏輯所構成的。你不能從多個角度分步理解它,而是要把它作為一個整體一下子吃掉;而同時這個「整體」由於過於複雜,又實在有點難以一口吞。頗有點悖論的意味。
很多人在使用 Git 一段時間後,會覺得 Git 有點複雜和混亂:
- 為什麼要 commit 後再 push 這麼囉嗦,而不能直接提交到中央倉庫?
- reset 這個指令為什麼這麼神奇,好多看起來並不相似的操作卻都要用到它?它到底是幹嘛的?
- revert 和 rebase 都可以撤銷歷史提交?它們的區別在哪?什麼,你說 reset 也行?
類似的問題其實還有很多。這些問題看起來每個都很難,但只要你把 Git 的概念瞭解了,這些問題(以及那些許許多多我沒有列出來的問題)就全都迎刃而解了。
學懂了概念,就能學懂 Git,就這麼簡單。可是市面上的很多 Git 教程都只停留在了 Git 的使用上,而對它的概念卻總是一筆帶過或乾脆提都不提。這裡的原因,我猜可能是因為它的概念太難講清楚了,也可能是因為這些作者其實也對 Git 的許多概念並不夠了解吧(這句是胡說八道,Git 教程的作者們請放下手中的槍)。
你為什麼應該選擇這本小冊
讀了這本小冊,你可以徹底理解 Git,從而徹底會用 Git。Git 的確很難,但別擔心,讀了這本小冊你就從根本上掌握它了(雖然熟練使用還會需要一些時間來練習)。
我寫技術文章,比較喜歡挑難的寫:難學會的,難講清的。我寫過 RxJava 的詳解,寫過 Android 自定義 View 的原理,目前來看反饋都很不錯。這些「學的人學不會,講的人講不明白」的東西,寫起來很痛苦,但寫完之後的成就感也挺大,我會去跟老婆吹牛:「這東西好多人都講不明白,我給講明白了,你看這些人看了以後留言多激動」(這話只敢在家說,出去說怕被打)。而且,寫著寫著,我也越來越明白怎麼把複雜的技術講簡單、講透徹。
所以簡單地總結:Git 難學,是因為它的概念難以整體理解。而這本小冊,就是從概念的角度出發,幫你先從本質上了解 Git 的工作模型,在此基礎上去了解它的具體用法,以此來達到四兩撥千斤的學習效果。而且這樣的學習具有更高的持久性,在看完這本小冊之後,你以後也很難再忘掉 Git 的用法了。
我是扔物線,Android 開發者,開源貢獻者,在 GitHub 上有 4.9k followers 和 7.8k stars ,個人的 Android 開源庫 MaterialEditText 被全世界多個項目引用,其中包括在全球擁有 5 億用戶的新聞閱讀軟件 Flipboard 。曾兩次在 Google Developer Group Beijing 線下分享會中擔任 Android 部分的講師。個人技術文章《給 Android 開發者的 RxJava 詳解》發佈後,在國內多個公司和團隊內部被轉發分享和作為團隊技術會議的主要資料來源,以及逆向傳播到了美國一些如 Google 、 Uber 等公司的部分華人團隊。
現在我正全職在做一個我個人的免費的 Android 高級進階分享計劃 HenCoder,旨在幫助國內的高級 Android 工程師(例如小團隊的 Android Leader)突破技術瓶頸,繼續高速提升。
名人推薦
你會學到什麼
Git 的基本用法
Git 的高級用法
Git 的概念和本質
Git 中的常見問題的處理方式
-
Git 中的高級需求的解決方案
例如:
「如何修改歷史提交中的錯誤」「誤刪 branch 怎麼辦」「merge 和 rebase 的區別」「reset 的幾種實用用法」這類東西又多又難記,但其實你根本不用去記他們。在你瞭解了 Git 的本質之後,不僅這些日經問題你能輕鬆解答,而且一些罕見的、複雜的問題,你也應付得來。
如果你想了解並進一步弄明白Git原理
可以長按下方二維碼,複製好本公眾號專屬優惠碼(Python)
享受7折優惠購買
長按識別,並在優惠碼中輸入 Python
閱讀更多 Python部落 的文章