1小時搞懂 Git 版本控制

  • 2020 年 3 月 17 日
  • 筆記

寫在前面

很高興在我的 Chat 分享里與你認識,前段時間,在平台上推出過幾篇文章分享,在此期間收到不少讀者的回復與好評,在這裡再次感謝大家的支援。

為什麼會寫這篇文章?

隨著秋招進行中,諸多大學生以及轉行做 IT 的技術者開始應聘工作,然而當他們面試被問到 Git 時,卻對其一無所知。那麼 IT 工作者團隊開發是怎樣的呢?目前的軟體開發項目通常是由一個研發小組(團隊)共同分析、設計、編碼、維護以及測試的。Git 則是一款分散式源程式碼管理工具,目前中國企業幾乎都已經完成了從 SVN 到 Git 的轉換。

本場 Chat 主要圍繞以下內容展開講解:

enter image description here

聊聊學習 Git 那些事

現在回想起來,其實我接觸 Git 的時候是在我大一的時候,我的表哥帶我入門的。當時因為需要做一個項目,所以他教我如何使用 Git 將寫好的程式碼推送到 GitHub 上,然後再從遠程倉庫拉到本地。起初因為沒有接觸過 Git,覺得這玩意很難學,又是一大堆命令需要記憶,在他教我的時候內心是抵觸的,當時覺得為什麼不把寫好的程式碼發送給我呢?你是否也有過這樣的疑問呢?

學習 Git 的時候,因為沒有和他認真學,在他教過我一遍之後還是一臉懵逼,寫命令的時候也是不時地回頭查看。因為不懂得 Git 版本控制的原理,總是將程式碼推送不到遠程伺服器,同時還出現一大堆錯誤,只好不停地去詢問他原因。

enter image description here

這是我當時學習 Git 版本控制的小經歷,現在你可以想想你的情況。

  • 你是否和我當初一樣,大學才開始接觸 Git?
  • 是否還未聽過 Git OR GitHub?
  • 是否還未擁有自己的 GitHub 帳號?
  • 是否還不懂 Git 工作原理?
  • 是否看完 Git 網路教程還是不會將程式碼推送到 GitHub?

如果你還是這種情況,沒關係,因為這不是你一個人的問題。我相信通過本次 Chat,你一定可以懂得 Git 工作原理,也會擁有自己的 GitHub 帳號,並且能將自己寫好的程式碼推送到遠程倉庫,通過 GitHub 託管,再也不用擔心重裝系統導致程式碼丟失的問題。(這是建立在你動手的前提之下,當然本次 Chat 我會儘力講的通俗易懂)

在使用 Git 之前,我們先需要學習一些 Git 知識鋪墊,以備我們後面更好的學習 Git 版本控制。

Git 知識鋪墊

  • 程式設計師為什麼要使用 Git 版本控制?
  • 常見的版本控制?
  • Git 是什麼?
  • Git 工作原理
  • Git 安裝

程式設計師為什麼要使用 Git 版本控制?

現在的軟體項目通常是由一個研發小組共同分析、設計、編碼、維護以及測試的。在公司 99% 的都是團隊合作開發項目,如果是團隊開發項目,那麼就會遇到以下問題:

  • 難以恢復至以前正確版本(版本 1.0~2.0)
  • 容易引發 bug
  • 程式碼責任問題(跑路)
  • 程式碼管理問題
  • 程式碼衝突問題(寫同樣的程式碼)
  • 無法進行許可權控制
  • 項目版本發布困難
  • ......

針對以上諸多問題,源程式碼管理工具(版本控制工具)應用而生。

使用版本控制工具:

  • 不會對現有工作造成任何損害
  • 不會增加工作量
  • 程式碼管理更方便
  • 程式碼得以追隨
  • 添加新的功能拓展時,會變得更加容易
  • ......

常見的版本控制

  • CVS 版本控制
  • SVN 版本控制
  • Git 版本控制
  • CVS:CVS 是一個 C/S 系統,是一個常用的程式碼版本控制軟體,1990 年誕生,10 多年前主流源程式碼管理工具。
  • SVN:SVN 又稱 subversion,是一款集中式源程式碼管理工具。由於之前 CVS 編碼的問題,大多數軟體開發公司都使用 SVN 替代了CVS,前幾年在中國軟體企業使用最為普遍。
  • Git:一款分散式源程式碼管理工具,目前中國企業基本都使用 Git。

CVS 和 SVN 是一個集中式的版本控制器,他們需要一台專門的版本控制伺服器。而 Git 是分散式的,他不要一台專門的伺服器來運行這個版本控制。每個開發人員的電腦組成的網路就可以運行 Git,特別適合源程式碼的發布和交流,因此大部分開源項目都用 Git。目前中國企業幾乎都已經完成了從 SVN 到 Git 的轉換。

enter image description here

Git 是什麼?

Git:一款分散式源程式碼管理工具,是 Linux 之父李納斯的第二個偉大作品。

SVN:集中式管理

  • 在集中式下,開發者只能將程式碼提交到伺服器;
  • 在集中式下,只有遠程伺服器上有程式碼資料庫。

Git:分散式管理

  • 在分散式下,開發者可以本地提交,也可以提交到遠程伺服器;
  • 在分散式下,每個開發者機器上都有一個程式碼倉庫。

在世界上所有的分散式版本控制工具中,Git 是最快、最簡單、最流行的。

Git 工作原理

學好 Git 的前提是理解 Git 工作原理。

了解 Git 工作原理前,我們需要了解兩個重要的知識,即工作區和版本庫。

  • 工作區:倉庫文件夾裡面,除了 .git 目錄以外的內容(詳見下圖)
  • 版本庫:Git 目錄,用於存儲記錄版本資訊(詳見下圖)
  • 版本庫中的暫緩區(stage)
  • 版本庫中的分支(master):Git 自動創建的第一個分支
  • 版本庫中的 HEAD 指針:用於指向當前分支

enter image description here

如下圖所示:

在工作區中有文件 a.txt、b.html,經過執行 git add . 命令之後會將工作區的文件添加到暫緩區中,再經過執行 git commit -m "說明文字" 命令之後,會將暫緩區的文件添加到版本庫的分支當中去。

enter image description here

Git 安裝

首先進入 Git 下載地址:選擇對應作業系統的版本,如下圖

enter image description here

選擇對應 Git 版本(32 位 or 64 位)適用於 Windows 安裝程式的 Git,如下圖

enter image description here

下載完成之後,安裝即可(安裝過程中點擊下一步 Next 即可)。

驗證 Git 是否安裝成功(驗證方法如下圖)

enter image description here

具體安裝過程這裡不做截圖:小白請見 Git 安裝百度經驗

Git 命令個人開發

在學習 Git 命令個人開發之前,我們需要了解一些常用的 Git 命令。

git help:Git 指令幫助手冊

打開 git bash 終端,輸入 git help 指令會出現如下圖所示的Git命令詳細解釋,每個命令代表的意思(不懂英文也沒關係,複製到翻譯內就 ok)如 git init 代表初始化一個倉庫。

enter image description here

git init:(個人倉庫)倉庫初始化

首先我們在桌面新建一個 project 空文件夾之後,滑鼠右鍵以 git bash here 打開 Git 終端,輸入 git init 命令之後,觀察 project 文件夾之後多了一個隱藏文件夾 Git 目錄。這時我們就創建好了一個受 Git 管理的倉庫,這個倉庫就在本地。

enter image description here

隱藏的 .git 目錄分別代表什麼意思詳見下圖:

enter image description here

在使用 Git 之前,我們需要配置用戶基本資訊,即配置用戶名和郵箱。(防止跑路)

當前項目下配置用戶名與郵箱命令如下:

  • 配置用戶名:git config user.name "用戶名"(跟蹤 who 修改記錄)
  • 配置郵箱:git config user.email "郵箱"(多人開發間的溝通)

enter image description here

git config -l:查看配置資訊命令

enter image description here

配置全局用戶名與郵箱命令如下(適用於所有項目):

  • 配置全局用戶名:git config --global user.name "用戶名"(跟蹤 who 修改記錄)
  • 配置全局郵箱:git config --global user.email "郵箱"(多人開發間的溝通)

git status :查看文件的狀態

  • 查看某個文件的狀態:git status 文件名
  • 查看當前路徑所有文件的狀態:git status

git add:將工作區的文件保存到暫緩區

  • 保存某個文件到暫緩區:git add 文件名
  • 保存當前路徑的所有文件到暫緩區:git add .(注意,最後是一個點 . )

git commit:將暫緩區的文件提交到當前分支

  • 提交某個文件到分支:git commit -m "注釋" 文件名
  • 保存當前路徑的所有文件到分支:git commit -m "注釋"

首先我們在工作區中,添加兩個新的文件:readme.txt、index.html。如下圖所示:

enter image description here

然後我們進入 Git 終端,輸入 git status 命令查看文件狀態如下圖所示:

enter image description here

然後我們輸入 git add . 命令 將工作區的文件保存到暫緩區,並輸入git status 命令再次查看文件狀態如下圖所示:

enter image description here

我們再次輸入git commit -m""命令"添加了新文件" 將暫緩區的文件提交到當前分支,如下圖所示:

enter image description here

上述 Git 命令執行分析:

enter image description here

git log:查看文件的修改日誌

在工作區再新增 git.txt 文件,並將該文件添加到主分支(執行上述命令),然後輸入 git log 命令,如下圖所示,我們可以清楚的看到什麼時候誰(who)幹了什麼事。

enter image description here

git reflog :查看分支引用記錄(能夠查看所有的版本號)

輸入 git reflog 命令,我們可以清楚的看到版本號下對應做了什麼事(以簡短的方式查看日誌)。

enter image description here

git diff:查看文件最新改動的地方

我們為工作區中的文件 index.html 添加了一段程式碼如下所示,然後因為工作區文件 index.html 被修改,所以我們再次將修改後的文件提交到主分支中。

enter image description here

然後我們再次修改程式碼,如下圖所示:

enter image description here

然後我們輸入 git diff 命令,如下圖所示,綠色的程式碼被最近一次被修改的程式碼,還未受到 Git 版本控制。

enter image description here

git reset:版本回退(建議加上––hard 參數,Git 支援無限次後悔)

  • 回退到上一個版本:git reset ––hard HEAD^
  • 回退到上上一個版本:git reset ––hard HEAD^^
  • 回退到上 N 個版本:git reset ––hard HEAD~N(N 是一個整數)
  • 回退到任意一個版本:git reset ––hard 版本號

注意:Git 命令團隊開發與個人開發命令基本相同,這裡不做詳細介紹。

GitHub 簡單使用

Git 命令補充:

git clone:下載遠程倉庫到本地

  • 下載遠程倉庫到當前路徑:git clone 倉庫的URL
  • 下載遠程倉庫到特定路徑:git clone 倉庫的URL 存放倉庫的路徑

git pull:下載遠程倉庫的最新資訊到本地倉庫

git push:將本地的倉庫資訊推送到遠程倉庫

  • 提交時如果遠程倉庫有其它人提交的最新程式碼,必須先 pull,再提交

GitHub 是一個面向開源及私有軟體項目的託管平台,因為只支援 Git 作為唯一的版本庫格式進行託管,故名 GitHub。

使用 GitHub 之前,我們需要去 GitHub 官網註冊一個屬於自己的帳號,然後登錄你的 GitHub 帳號。選擇你的倉庫:

enter image description here

點擊右側 New 新建一個倉庫,並給改倉庫起一個名字,可以描述該倉庫是什麼項目,如下圖所示:

enter image description here

enter image description here

然後我們在桌面創建一個 chatdemo 文件夾,以 git bash 終端打開,輸入 git clone 倉庫的URL 下載遠程倉庫到本地,即 git clone https://github.com/xxxcode/git.git:

enter image description here

然後我們進入 chatdemo 下的工作區,新建 readme.txt 與 index.html 文件:

enter image description here

使用 Git 命令將工作區的文件提交到暫緩區,並再次提交到主分支:

enter image description here

git push:將本地的倉庫資訊推送到遠程倉庫:

enter image description here

git push 提交之後,遠程倉庫新增了 2 個文件,如下圖所示:

enter image description here

Chat 結語

通過本次 Chat 我們學習了 Git 的工作原理,以及 Git 版本控制管理程式碼的好處,同時也學習了 Git 的常用命令,最後我們通過 Git 版本控制的命令將本地的程式碼提交到 GitHub 遠程倉庫中。本次學習主要是通過學習 Git 工作原理,通過 Git 命令將程式碼提交到遠程倉庫中。我相信大家理解了 Git 工作原理之後,學習 Git 中的其它命令也會很容易,這裡就不逐一的對 Git 各個命令做詳細講解。

Tags: