Git命令的動畫展示,讓我們學習Git事半功倍

2021-01-11 機器學習與數據挖掘

Git幾乎是每個程式設計師的標配,當然有時候也是噩夢,因為如果不是對他的各種命令非常熟悉的話,各種繞腦的命令會把我們弄暈,因為很多時候我們並不知道這個命令內部到底是怎麼樣的,如果每一個命令都有相對應的動畫,我們是不是理解起來更容易一些呢? 前不久,哥倫比亞的一位小姐姐寫了一篇這樣的文章《CS Visualized: Useful Git Commands》,文章裡她通過生動形象的動畫這樣直觀的方式,向開發者展示 Git 命令中的 merge、rebase、reset、revert、cherry-pick 等常用命令的具體原理。下面我們一起看看吧。

合併

擁有多個分支機構非常方便,以使新變更彼此分離,並確保您不會意外將未經批准或破損的變更推到生產中。更改獲得批准後,我們希望在生產部門中獲得這些更改!

將更改從一個分支轉移到另一個分支的一種方法是執行git merge!!Git可以執行兩種類型的合併:快進或無快進

現在這可能沒有多大意義,所以讓我們看一下差異!

快進(--ff)

一個快進合併相比,我們正在合併分支當前分支已經沒有多餘的提交可能發生。Git是... 懶惰,並且首先會嘗試執行最簡單的選擇:快速前進!這種類型的合併不會創建新的提交,而是會在我們當前分支中要合併的分支上合併這些提交)

完善!現在,我們dev可以在分支上獲得對master分支所做的所有更改。那麼,什麼都不是快進呢?

不速前進(--no-ff)

如果您當前的分支與您要合併的分支相比沒有任何額外的提交,那就太好了,但是不幸的是,這種情況很少!如果我們在當前分支上提交了要合併的分支所沒有的更改,則git將執行no-fast-forward合併。

通過無快進合併,Git 在活動分支上創建了一個新的合併提交。提交的父提交既指向活動分支又指向我們要合併的分支!

沒什麼大不了的,完美的合併! master現在,分支包含我們在dev分支上所做的所有更改。

合併衝突

儘管Git擅長決定如何合併分支並向文件中添加更改,但它不能總是自己一個人做出決定當我們嘗試合併的兩個分支在同一文件中的同一行上有更改時,可能會發生這種情況,或者一個分支刪除了另一個分支修改的文件,依此類推。

在這種情況下,Git將要求您幫助確定我們要保留的兩個選項中的哪一個!假設在兩個分支上,我們都編輯了第一行README.md。

如果要合併dev到master,將導致合併衝突:您希望標題是Hello!還是Hey!?

嘗試合併分支時,Git將向您顯示衝突發生的位置。我們可以手動刪除不想保留的更改,保存更改,再次添加更改的文件,然後提交更改

好極了!儘管合併衝突通常很煩人,但這是完全有意義的:Git不應僅假設我們要保留哪個更改。

變基

我們只是看到了如何通過執行可以將更改從一個分支應用於另一個分支git merge。將更改從一個分支添加到另一個分支的另一種方法是執行git rebase。

一個git rebase 副本從當前分支的提交,並提出這些複製提交指定的分支上。

太好了,我們現在可以在master分支上進行所有在分支上所做的更改dev!

與合併相比,Git的最大區別是Git不會嘗試找出要保留和不保留的文件。我們要重新定位的分支始終具有我們要保留的最新更改!這樣您就不會遇到任何合併衝突,並且可以保持良好的線性Git歷史記錄。

此示例顯示了在master分支上的基礎。但是,在較大的項目中,您通常不想這樣做。當為複製的提交創建新哈希時git rebase ,A會更改項目的歷史記錄!

每當您在Feature分支上工作時,Rebasing很棒,並且master分支已更新。您可以在分支上獲取所有更新,這將防止將來發生合併衝突!

互動基礎

在重新提交之前,我們可以對其進行修改!can我們可以通過交互式基礎來做到這一點。交互式基礎也可以在您當前正在使用的分支上使用,並且希望修改某些提交。

我們可以對基於基準的提交執行6個操作:

reword:更改提交消息edit:修改此提交squash:將提交合併到上一個提交中fixup:將提交合併到先前的提交中,而不保留提交的日誌消息exec:對要重新設置基準的每個提交運行命令drop:刪除提交太棒了!這樣,我們可以完全控制提交。如果我們想刪除一個提交,就可以drop了。

或者,如果我們要壓縮多個提交以獲取更清晰的歷史記錄,那沒問題!

交互式重定基使您可以控制要重新定基的提交,即使在當前活動分支上也是如此!

重設

可能發生了我們提交了以後不想要的更改。也許是一個WIP提交,或者一個引入了錯誤的提交!that在這種情況下,我們可以執行git reset。

一個git reset擺脫當前的所有籌備的文件,對我們的控制權,其中HEAD應指向。

軟重置

一個軟復位移動HEAD到指定的提交(或相對於提交的指數HEAD),沒有擺脫被引入於事後提交的變化!

假設我們不想保留9e78i添加style.css文件的提交,也不想保留035cc添加index.js文件的提交。但是,我們要保持最新添加style.css和index.js檔案!軟復位的理想用例。

鍵入時git status,您會看到我們仍然可以訪問對先前提交所做的所有更改。太好了,因為這意味著我們可以修復這些文件的內容,以後再提交!

硬重置

有時,我們不想保留某些提交所引入的更改。與軟重置不同,我們不再需要訪問它們。Git應該簡單地將其狀態重置為指定提交時的狀態:這甚至包括工作目錄和暫存文件中的更改!

Git放棄了在9e78i和上引入的更改035cc,並將其狀態重置為提交時的狀態ec5be。

正在還原

取消更改的另一種方法是執行git revert。通過還原某個提交,我們創建一個包含還原更改的新提交!

假設ec5be添加了一個index.js文件。後來,我們實際上意識到我們不再希望此提交引入此更改!讓我們還原ec5be提交。

完善!提交9e78i還原了提交所引入的更改ec5be。git revert為了撤消某個提交,而無需修改分支的歷史記錄,執行a 非常有用。

採摘櫻桃

當某個分支包含一個引入了我們活動分支所需的更改的提交時,我們可以執行cherry-pick該命令!通過cherry-pick提交,我們在活動分支上創建了一個新的提交,其中包含cherry-picked提交所引入的更改。

假設76d12在dev分支上的提交將更改添加到index.js我們想要在master分支中的文件。我們不想整個我們只關心這一次提交!

太酷了,master分支現在包含了76d12引入的更改!

正在取得

如果我們有一個遠程Git分支,例如Github上的一個分支,則可能發生該遠程分支具有當前分支所沒有的提交!也許另一個分支被合併了,您的同事提出了快速解決方案,依此類推。

通過git fetch在遠程分支上執行a,我們可以在本地獲取這些更改!它不會以任何方式影響您的本地分支機構:fetch只需下載新數據即可。

現在,我們可以看到自上次推送以來所做的所有更改!現在,我們可以在本地擁有新數據,然後決定要處理的數據。

拉動

儘管a git fetch對於獲取分支的遠程信息非常有用,但是我們也可以執行a git pull。A git pull實際上是兩個命令合二為一:a git fetch和a git merge。當我們從原點提取更改時,我們首先要像使用一樣獲取所有數據git fetch,之後最新的更改會自動合併到本地分支中。

太棒了,我們現在可以與遠程分支完美同步,並具有所有最新更改!

刷新日誌

每個人都會犯錯,那完全可以!有時,您可能覺得自己已經把git repo搞砸了,以致於只想完全刪除它。

git reflog這是一個非常有用的命令,用於顯示已執行的所有操作的日誌!這包括合併,重置,還原:基本上是對分支的任何更改。

如果您輸入有誤,可以HEAD根據reflog提供給我們的信息進行重置,輕鬆地重做!

假設我們實際上不想合併origin分支。當執行git reflog命令時,我們看到合併之前倉庫的狀態為HEAD@{1}。讓我們執行一次git reset將HEAD指向它所在的位置HEAD@{1}!

我們可以看到最新動作已被推送到reflog!

相關焦點

  • 【Git】616- git命令的進階和複習(帶動圖效果)
    :learnGit在線學習猴子都能懂的git小姐姐用動畫圖解Git個人比較推薦第二個Git學習網站猴子都能懂的git,圖文結合,簡單明了,本文將介紹一些常用 Git 指令,作為一個學習總結git rebasegit mergegit resetgit revertgit cherry-pick
  • git命令的進階和複習(帶動圖效果)
    :learnGit在線學習猴子都能懂的git小姐姐用動畫圖解Git個人比較推薦第二個Git學習網站猴子都能懂的git,圖文結合,簡單明了,本文將介紹一些常用 Git 指令,作為一個學習總結git rebasegit mergegit resetgit revertgit cherry-pick
  • Git 常用命令清單筆記
    這裡是我的筆記,記錄一些git常用和一些記不住的命令,這個筆記原本是基於 顏海鏡的文章增加的,後面慢慢增加了許多內容,可以看出的的學習軌跡。
  • 一學就會的git命令
    導讀使用git 已不知好幾年,最近想著把常用的一些git 命令做個總結,本文主要寫的是git常用的命令。>git config --global user.name 'your name' // 全局配置用戶名git help (查看文檔)查看常見的命令;查看git全部的命令;查看git命令某個文檔, 舉個慄子:
  • Git: 聊聊Rebase命令
    Step3: 合併分支發現異同之後,你想在你現在的工作進度上把別人的功能合併過來,這個時候就要涉及到分支合併了,此時你有兩個選擇,一個是merge,另一個是rebase(時刻記住merge與rebase幹的是一件事兒
  • Git新手使用命令集合-初級
    哈哈當然,對於使用命令操作來講,一般只要記住幾個就可以了,如果要熟練使用,那麼至少得60~~100+吧!不然也不能算熟練吧!所以要全部一下記住,常人來講,還是有一些難度吧!那麼,如果命令行操作還有難度的朋友們注意了,本文就是你的福音,我這裡也主要寫給各種會使用到命令行操作GIT的小猿們。
  • Git命令的用法小結
    git命令的基本數據流Git架構倉庫一個git倉庫包含工作目錄,與.git目錄。也可以通過命令行設置,如$ git config --global user.email 郵箱機制$ git config --global user.name 用戶名幫助(help)有多種方式獲取git的整體幫助,或者某個命令的幫助。
  • Git版本控制常用命令
    Git常用命令集git使用命令1、查看git配置信息git config --list2、查看git用戶名git config user.name3、查看郵箱配置git config user.email4、全局配置用戶名git config --global user.name "nameVal"5、全局配置郵箱git config --global user.email
  • 工作流一目了然,看小姐姐用動圖展示10大Git命令
    merge、git rebase、git reset、git revert、git fetch、git pull、git reflog……你知道這些 git 命令執行的究竟是什麼任務嗎?我們執行 rebase 的分支總是含有我們想要保留的最新近的修改!這樣我們不會遇到任何合併衝突,而且可以保留一個漂亮的、線性的 Git 歷史記錄。 上面這個例子展示了在 master 分支上的變基。但是,在更大型的項目中,你通常不需要這樣的操作。git rebase 在為複製的提交創建新的 hash 時會修改項目的歷史記錄。
  • Git 常用命令及使用
    Git 常用命令使用1)、本地庫初始化 git init2)、設置籤名作用:區分不同開發人員的身份。說明:這裡設置的籤名和登錄遠程庫(代碼託管中心)的帳戶沒有關係。a)、項目級別籤名:git config user.name [AAA]git config user.email [郵箱地址]籤名信息位置:cat .git/configb)、系統級別籤名:git config --globaluser.name [AAA]git config --global user.email
  • git在項目中的常用命令
    其中.git文件夾中包含了兩個部分,一個是暫存區(Index或者Stage),顧名思義就是暫時存放文件的地方,通常使用add命令將工作區的文件添加到暫存區裡;本地倉庫:.git文件夾裡還包括git自動創建的master分支,並且將HEAD指針指向master分支。
  • 30 分鐘 git 命令入門到放棄
    git 現在的火爆程度非同一般,它被廣泛地用在大型開源項目,團隊開發,以及獨立開發者,甚至學生之中。初學者非常容易被各種命令,參數嚇哭。但實際上剛上手你並不需要了解所有命令的用途。你可以從掌握一些簡單,強大的命令開始,逐步去學習。(這就是這篇文章要講的)。好了,上來!
  • 您必須知道的 Git 分支開發規範,附 Git 常用命令大全!
    最近流感嚴重,我早上一大早就起床到醫院掛號了,排在 100 多號,一直到中午還沒輪到我們。所以,這篇文章有些遲到,很多人的私信,沒來得及回復,這裡說聲抱歉!我們都知道,阿里有 Java 規範,Redis 規範,而 Git 規範幾乎從未被聊起,所以,今天我就說一說 Git 的日常分支開發規範。先說分支命名規範。
  • 常用Git 命令清單
    clone [url]# 添加$ git add ./# 提交$ git commit -m 「提交」# 上傳$ git push# 下拉更新$ git pull02配置和查看信息# 顯示當前的Git配置$ git config --list# 編輯Git配置文件
  • Git命令總結,總結收藏
    git init # 初始化本地git倉庫(創建新倉庫) git config --global user.name "xxx" # 配置用戶名 git config --global user.email "xxx@xxx.com" # 配置郵件 git config --global color.ui true # git status
  • Git分支原理命令圖文解析
    現在,讓我們看看與git分支有關的操作命令: 1、git branch [option] [name] 如果不使用任何參數,它可以用來查看所有的分支,而在分支名前有*標記的則為主分支,如果加上name為創建新分支,,如git branch child,則會創建一個名為child的分支,此外,它有一些常用的參數:
  • Git命令解析 - init、add、commit
    1.git init此命令初始化一個新本地倉庫,它在工作目錄下生成一個名為.git的隱藏文件夾。如果不加此參數,僅使用git update-index --add file.txt 的方式,則與add命令效果完全相同。本例中,我們指定的文件模式為100644,表明這是一個普通文件。
  • Python 命令行之旅:使用 docopt 實現 git 命令
    作者:HelloGitHub-Prodesire一、前言 在前面兩篇介紹 docopt 的文章中,我們全面了解了 docopt 的能力。按照慣例,我們要像使用 argparse 一樣使用 docopt 來實現 git 命令。
  • 熟悉Git使用的一些實操練習命令
    關於Git文檔,有官方的文檔(中文版)、其他一些文檔,還有我總結的gitlabFAQ(github:/bollwarm/gitlabFAQ)提到一些信息,以及我發的很多相關文章都是很好的學習材料。但是有時候可能要的是不需要深思熟慮、不需要深究細節的信手粘來的"傻瓜"式實操文檔。所以今天蟲蟲就給你總結了這樣一份材料,供你跟著實際操作聯繫。
  • Git 的奇技淫巧
    下面的內容就是列舉了常用的 Git 命令和一些小技巧,可以通過 "頁面內查找" 的方式進行快速查詢:Ctrl/Command+f。如果之前未使用過 Git,可以學習 Git 小白教程[2]入門。一定要先測試命令的效果後,再用於工作環境中,以防造成不能彌補的後果!