臥槽!小姐姐用動畫圖解 Git 命令,這也太秀了吧?!

2022-01-05 GitHubDaily

公眾號關注 「GitHubDaily」

設為 「星標」,每天帶你逛 GitHub!

大家好,我是小 G。

在座的各位應該都知道,Git 作為居家必備、團隊協作之利器,自從 Linus Torvalds 發布這款工具後,便一直受到各路開發者的喜愛。

不過,儘管如此,小 G 還是經常能在公眾號後臺,看到有不少水友留言反饋,說 Git 裡面太多乾巴巴,看起來非常枯燥無味的命令行,一旦幾天沒用,就很容易就忘得一乾二淨,希望 GitHubDaily 能出一些與 Git 相關的輔助教程,或者比較有趣、對小白比較友好的學習方式。

emmm.. 作為有求必應的小 G,當然是選擇儘可能滿足大家的一切要求啦。

幾天前,小 G 偶然在 Twitter 看到一篇文章:《CS Visualized: Useful Git Commands》。

作者是來自英屬哥倫比亞的小姐姐 Lydia Hallie,在這篇文章裡面,她通過生動形象的動畫,以更加直觀的方式,向開發者展示 Git 命令中的 merge、rebase、reset、revert、cherry-pick 等常用騷操作的具體原理。

接下來,小 G 會挑選幾個最簡單的例子,讓你們看看這位小姐姐是如何用動畫來進行展示的。

在開始之前,還是得先跟大家簡單說一下,這篇文章不算是針對小白萌新的 Git 初級入門文章,而是希望幫助有一定 Git 實操基礎的用戶,加深對具體 Git 命令的操作理解。

對 Git 不太熟悉的小夥伴,可看我們此前在公眾號上分享的這幾篇文章:

嗯,下面開始進入正題。

合併(Merge)

我們都知道,在使用 Git 做日常開發項目的時候,都會選擇將項目切換成多個分支,在不同分支上處理不同事務。最簡單的,就是開發、測試、生產等幾個不同環境來回切換,使得項目管理與產品迭代更為輕鬆,亦可最大化避免項目出現嚴重漏洞時所帶來的傷害。

當我們在不同分支開發完代碼後,會選擇將分支進行合併(merge)。平時常用的 git merge 操作,又可分為這兩種類型:fast-forwar 和no-fast-forward。

fast-forward

一般情況下,Git 會默認使用 fast-forward 這種類型來處理分支合併,當我們成功合併後,不會產生任何提交記錄,且當舊分支被移除後,其分支信息也會被一併刪除。

通過動畫的方式展示,就像下面這樣:

no-fast-forward

而當我們使用 no-fast-forward 模式,即在合併分支命令加入 --no-ff 後綴的方式運行時,便會生成一個新的提交記錄,就像下面這樣:

合併衝突

在我們日常進行團隊協作開發的時候,總會出現同個文件在不同分支上被同時編輯的情況。

這樣,當我們提交代碼的時候,比較晚提交的另一方,在運行 Git 命令時就會報衝突錯誤。在正常情況下,只要我們手動處理下衝突文件,然後再重新提交即可。

打個比方,現在代碼倉庫有個 README 文件,在同一行的位置,在不同分支上被編輯了,如下所示:

那麼,使用合併命令,及修復衝突的過程,用動畫的形式展示,看起來就像下面這樣:

可以看到,在移除多餘的提示代碼後,會重新產生一條新的提交記錄。Rebase在進行分支合併前,我們一般會先使用pull命令拉取線上的最新代碼,在保證無任何衝突發生的前提下,再進行分支合併。但是,這種代碼拉取方式是最為簡單粗暴的,通過這種方式合併,會使得整個提交記錄看起來特別亂,不太直觀與優雅。因此,對 Git 使用比較規範、追求比較高的程式設計師,都會先使用rebase整理下提交記錄,再提交代碼,經過這樣處理後的 Git 提交記錄,看著就比直男還直了。可以清晰的看到,原本對接在 master 分支第二處的 dev 分支,被對接到頂部了。Hard Reset日常開發中,我們可能會因為提交了某些無用代碼而進行回滾操作。通常在只有一個人獨立開發的項目情況下,會選用--hard命令來進行回滾處理。不過,這種操作方式有個不好的地方,在多人協作的時候,這麼搞很容易使分支出現衝突,或直接毀掉別人的提交記錄。hard reset以動畫的形式表現,看起來就像下面這樣:除此之外,小姐姐還提到了 Reverting、Cherry-picking、Fetch 等一系列操作,這裡限於篇幅,就不跟大家一一講解啦。https://dev.to/lydiahallie/cs-visualized-useful-git-commands-37p1以上,就是今天跟大家的分享啦,最近也發現了幾個比較有意思的項目,小 G 正在把玩中,回頭玩的比較溜了,會在公眾號這邊撰文跟大家分享哈。擔心走丟的小夥伴,可以將 GitHubDaily 公眾號設為星標,我們下期再會。

相關焦點

  • 小姐姐用動畫圖解Git命令,一看就懂!
    「 點擊
  • 【Git】616- git命令的進階和複習(帶動圖效果)
    小姐姐用動畫圖解Git個人比較推薦第二個Git學習網站猴子都能懂的git,圖文結合,簡單明了,本文將介紹一些常用 Git 指令,作為一個學習總結git rebasegit mergegit resetgit revertgit cherry-pickgit fetchgit
  • git命令的進階和複習(帶動圖效果)
    小姐姐用動畫圖解Git個人比較推薦第二個Git學習網站猴子都能懂的git,圖文結合,簡單明了,本文將介紹一些常用 Git 指令,作為一個學習總結git rebasegit mergegit resetgit revertgit cherry-pickgit fetchgit
  • Git命令的動畫展示,讓我們學習Git事半功倍
    Git幾乎是每個程式設計師的標配,當然有時候也是噩夢,因為如果不是對他的各種命令非常熟悉的話,各種繞腦的命令會把我們弄暈,因為很多時候我們並不知道這個命令內部到底是怎麼樣的,如果每一個命令都有相對應的動畫,我們是不是理解起來更容易一些呢?
  • 工作流一目了然,看小姐姐用動圖展示10大Git命令
    我發現在使用 Git 時,在頭腦裡可視化地想像它會非常有用:當我執行一個特定命令時,這些分支會如何交互,又會怎樣影響歷史記錄?為什麼當我在 master 上執行硬重啟,force push 到原分支以及 rimraf 我們的 .git 文件夾時,我的同事哭了? 我覺得創建一些最常用且最有用的 Git 命令的可視化示例會是一個完美的用例!
  • 這位小姐姐用動圖展示了10個Git命令,看完過目不忘!
    git 命令執行的究竟是什麼任務嗎?我覺得創建一些最常用且最有用的 Git 命令的可視化示例會是一個完美的用例!下面我將介紹的很多命令都有可選參數——你可以使用這些參數來改變對應命令的行為。而我的示例只會涵蓋命令的默認行為,而不會添加(或添加太多)可選配置!
  • 你可能不太會用的10個Git命令
    撤銷可以用 git reset、git checkout 和 git revert 撤銷在代碼庫中所做的改動,這些命令可能有點難理解。git reset 和 git checkout 既可用於提交也可用於單個文件的修改,而 git revert 只能用在提交層面。如果你只需要處理尚未合併到協作遠程工作的本地提交,你可以使用這三者中任何一條命令。
  • Git命令詳解與提交規範
    Remote遠程倉庫,用來託管代碼的伺服器,遠程倉庫的內容能夠被分布在多個地點的處於協作關係的本地倉庫修改,本地倉庫修改完代碼後通過 git push 命令同步代碼到遠程倉庫。以上包括Git中最常見的三條命令git add、git commit、git push的基本用法。如果涉及到這些區域文件的操作,命令如下圖所示。
  • ​你可能不太會用的10個Git命令
    我們將了解該如何用 Git 進行檢查、刪除和整理操作。我們還將介紹如何用 Bash 別名和 Git 編輯器配置來逃避 Vim 以節省時間。如果你不熟悉基本的 git 命令,在閱讀本文前可以先參考我之前寫的關於 Git 工作流程的文章。
  • 你可能不太會用的 10 個 Git 命令
    我們將了解該如何用 Git 進行檢查、刪除和整理操作。我們還將介紹如何用 Bash 別名和 Git 編輯器配置來逃避 Vim 以節省時間。如果你不熟悉基本的 git 命令,在閱讀本文前可以先參考我之前寫的關於 Git 工作流程的文章。
  • Git命令大全
    Android Studio 的 git插件 用起來很溜(當然還有其他一些工具),它們的本質都是git命令的UI化封裝。git log --start顯示每次提交的簡略的統計信息,貌似不太好用。git log --graph查看分支合併圖。
  • 30 分鐘 git 命令入門到放棄
    git 現在的火爆程度非同一般,它被廣泛地用在大型開源項目,團隊開發,以及獨立開發者,甚至學生之中。初學者非常容易被各種命令,參數嚇哭。但實際上剛上手你並不需要了解所有命令的用途。你可以從掌握一些簡單,強大的命令開始,逐步去學習。(這就是這篇文章要講的)。好了,上來!
  • 圖解常用的 Git 指令含義
    本文會介紹一些常用 Git 指令的圖解說明。包括:合併(git merge)當項目中包含多條功能分支時,有時就需要使用 git merge 命令,指定將某個分支的提交合併到當前分支。Git 中有兩個合併策略:fast-forward 和 no-fast-forward。fast-forward(--ff)如果當前分支在合併分支前,沒有做過額外提交。
  • 我說小夥子,你死記Git命令,不好使
    來源 l 經授權轉自 編程充電寶作者 l 在所不辭很多Git命令靠死記硬背很難徹底掌握,本文我們就從常用命令的工作原理角度入手,來徹底掌握這些命令。在開始本篇文章之前,我們可以先試著回答以下幾個問題:如果有感到很模糊的,那麼建議還是往下仔細看看文章吧~三大分區我們首先用一張圖來理解工作區、暫存區和倉庫的位置:我們先看由下而上的路徑
  • (一)深入淺出圖解Git,入門到精通(保姆級教程)
    這四個區域實現的原理圖所下所示,使用過Git的對於下面的命令再熟悉不過了。代碼回退那麼從高level向低level移動代碼的命令如下:git reset --files:用本地倉庫覆蓋暫存區中修改,也就是覆蓋最後一次git add的內容。git checkout --files:把文件從暫存區複製到工作區,用於放棄本地的修改。git checkout HEAD --files:回退最後一次的提交內容。
  • GIT的基本命令
    、用過,但是早已忘記了。  我只用過 Git 和 SVN,所以這裡簡單對比一下這兩個版本控制軟體吧。 二、Git vs SVN1.模式Git 是分布式的,SVN 是中心式的。  分布式的好處是我們可以本地提交代碼,而中心式的必須連接中心伺服器才能提交代碼。
  • 深入淺出圖解Git,入門到精通(保姆級教程)
    更加詳細的git log參數可以查看命令幫助。Git查看歷史記錄的另一個命令是git reflog,它可以查看「所有分支的所有操作記錄,包括已經刪除的commit記錄和reset記錄」。新建標籤新建一個標籤,默認是在HEAD新建,可以指定commit id新建,具體命令如下所示:$ git tag <標籤名>$ git tag <標籤名> <commit id>$ git tag -a <標籤名> -
  • Git基本命令大全
    如果以下最基本的git命令都不懂,那麼可以轉行了。回退到指定版本(其中d7b5是想回退的指定版本號的前幾位)16、git reflog查看命令歷史:查看倉庫的操作歷史17、git remote add origin git://127.0.0.1/abc.git增加了遠程倉庫abc
  • Git新命令switch和restore
    命令承載了分支操作和文件恢復的部分功能,有點複雜,並且難以使用和學習,所以社區解決將這兩部分功能拆分開,在git 2.23.0中引入了兩個新的命令switch和restore用來取代checkout下面分別來說說分支操作和文件恢復,如果你對git還不太熟悉,可以先閱讀我的git入門文章分支操作原來git有兩個命令用來操作分支,分別是branch和checkout
  • 動畫:掃盲 Git 版本控制
    最近不少讀者和鹿哥反饋說,能不能掃盲一下 git,無論是 github 開源項目網站還是團隊合作,都少不了 git 版本控制的使用。加上很多的在校生沒有過多接觸過 git,所以呢,鹿哥決定最基礎的講起,請大佬多多包涵我這基礎的內容。因為 git 涉及到的內容太多,寫一篇太長,在閱讀體驗上不友好,那麼分為兩篇吧。