前言
前段時間進入新公司,開始使用 Git 作爲版本控制工具。遂對 Git 基礎進行了一定的學習,這裏是我的一些學習總結。主要是命令太多,需要理解記憶比較好,這裏總結一下,希望對大家有一些幫助。
Git 理解
版本控制系統發展
版本控制系統的發展過程,大致沿着 VCS(Version Control System,版本控制系統) -> CVCS(Centralized Version Control Systems,集中式版本控制系統) -> DVCS(Distributed Version Control System,分佈式版本控制系統)前進。
常用版本控制系統中,SVN 是 CVCS 的一個代表,Git 是 DVSC 的一個代表。
DVCS 由於其安全,靈活等優點,逐漸成爲版本控制系統領域的最佳實踐,Git 更是成爲了版本控制系統的事實標準,所以學習 Git 很有必要。
Git 命令理解
Git 強大的命令系統給我們帶了很大的便利,很靈活,很好用。但是對初學者不是很友好。(幾十個命名,要搞死人啦)
這裏對這些 Git 命令做個分類,好記一些。大致分爲 4 類。
- Git 倉庫相關命令。
- git init
- git clone
- git remote
- git push
- git pull
- git fetch
- Git 工作流相關命令。
- git add
- git commit
- git restore
- git status
- Git 分支相關命令
- git branch
- git checkout
- git merge
- git rebase
- 其他命令
- git config 配置
- git help
- git diff
- git log
- git rm
- git mv
- git tag
Git 倉庫
Git 更像是一個小型的文件系統,提供了許多以此爲基礎構建的超強工具,而不只是一個簡單的 VCS。
-
Git 倉庫
學習 Git,第一個要理解的概念就是 Git 倉庫。Git 倉庫說着很神祕,其實就是一個被 Git 管理的文件夾。
Git 倉庫存在一個隱藏的.git
文件夾,.git
內部存放版本控制相關的文件。當我們切換分支或版本時,Git 會自動拉取對應的文件,展示到文件夾中;當我們提交一些文件時,Git 會把相關的提交做一定的處理,存到.git
中。 -
Git 遠程倉庫
剛接觸 Git 的人,有時會迷失在 Git 倉庫、Git 遠程倉庫、GitHub 這些名詞中。
其實,通俗的解釋,Git 遠程倉庫也就是一個普通的 Git 倉庫罷了,只是這個倉庫放在某個遠程服務器上。Git 作爲一個分佈式的版本控制系統,本地和遠程倉庫都是一樣的。至於 GitHub,是一個 Git 倉庫託管網站,大家的遠程倉庫放到他的服務器上。 -
本地文件夾、Git 倉庫、Git 遠程倉庫之間的關係
圖中大概介紹了三者的關係。 -
倉庫相關命令記憶
- 建立本地倉庫:
git init
本地文件夾 -> Git 倉庫;
git clone
克隆遠程倉庫到本地。 - 操作遠程倉庫
git remote
:remote 命令通過不同的參數實現不用的功能。可以理解爲增刪改查- add:連接本地倉庫和遠程倉庫
- rm:斷開關聯
- rename:重命名遠程倉庫在本地的 name
- 無參數/-v/show origin:查看遠程倉庫相關信息
- 本地 Git 倉庫和遠程倉庫交互
git push、git pull、git fetch
:- push:推送本地提交到遠程
- pull:從遠程拉數據
- fetch:也是從遠程拉數據,但是 fetch 只是從遠程倉庫拉數據,不會自動合併數據到本地倉庫。詳見遠程倉庫的使用 - 從遠程倉庫中抓取與拉取
- 建立本地倉庫:
Git 工作流
Git 使用中,一般操作方式大致爲 修改 -> 暫存 -> 提交。形成一個工作流。
-
Git 倉庫中文件常見 4 種狀態
- untracked 新添加到 Git 倉庫中的文件會被標識爲未追蹤狀態。
- unmodefied 未修改狀態,
git clone
下來的文件,初始爲未修改狀態;commit 命令提交過的文件也爲未修改狀態。 - modefied 已修改狀態,當文件被修改後,文件會被標識爲已修改狀態。
- staged 已暫存狀態,通過
git add
命令暫存後的文件會標識爲已暫存狀態。
使用
git status
查看文件狀態 -
git add
add 命令一般來說有三種使用場景- 跟蹤新文件
- 暫存已修改文件
- 合併時把衝突的文件標記爲已解決狀態
總的來說,其實就是“把文件添加到暫存中,等待提交”
-
git commit
commit 命令用來提交一個版本,提交完成之後,就會有一個版本存在 Git 倉庫中。
這裏有一篇文章可以幫助理解 Git commit 的內部原理。這纔是真正的Git——Git內部原理揭祕! -
撤銷相關
Git 操作過程中,會存在一些撤銷操作的情況。
常用的命令就是git restore [file]
直接調用這條命令可以撤銷對文件的修改;
如果需要撤銷已暫存的修改,需要添加 --staged 參數git restore --staged [file]
;
另外git commit --amend
指令用來修改上次提交,如果自上次提交以來未做任何修改,則修改的只是提交信息;
另外還有版本回退的情況,可以使用git reset
命令
Git 分支
如果日常自己使用 Git 的話,瞭解 Git 倉庫、Git 工作流相關命令基本就能滿足需求。實際開發工作中還要用到分支。
- 分支的理解
摘錄:Pro Git - 分支簡介
常金:多讀幾遍 Pro Git 上的這段介紹,結合參考資料中的怎麼理解 git 的快照細細品味吧 git branch
分支命令總結:依然是增刪改查 多一個切換 合併 變基
- 遠程分支、跟蹤分支
摘錄:Pro Git - 遠程分支
常金:
- 分支流水線及特性分支
摘錄:閱讀 Pro Git 中,這一節分支開發工作流,瞭解更多。
常金:平常開發中常常會遇到master
、develop
、hotfix-xx
、feature-xxx
這種命名的分支。其實這只是一種約定俗成,
master 一般作爲主分支,其代碼一般較爲穩定用來發布到生產環境;
develop 一般作爲開發分支,開發完成的某個功能,合併到develop分支上,一般對應到測試環境;
feature-xx 分支,開發某些特定功能時使用;
hotfix-xx 分支一般解決某些 BUG 時使用,解決後直接合併到 master 分支,發佈到生產;
另外還有一些公司會用到 release 分支等,其實也是公司內部的約定,不同公司情況不盡相同,不過大概意思都是差不多的。 - 變基
摘錄:變基
常金:重點就是一句話。變基的原理:提取差異,目標分支上重新應用差異
Git 其他命令
Git 的其他命令一般不是很常用,理解上邊的三部分就夠日常開發使用了;自己嘗試使用下看下效果。
參考資料
[1] Pro Git
[2] 如何理解git的快照?