我是辰兮,很高興你能來閱讀,這篇文章是我初學Git的相關學習的總結,分享給初學者參考,如有不足歡迎指出,分享獲取新知,大家一起進步。
一、什麼是Git
1、Git是一個開源的分佈式版本控制系統
,用於敏捷高效地處理任何或小或大的項目。
2、 Git 是 Linus Torvalds 爲了幫助管理 Linux 內核
開發而開發的一個開放源碼的版本控制軟件。
3、 Git 與常用的版本控制工具 CVS, Subversion 等不同,它採用了分佈式版本庫的方式,不必服務器端軟件支持
。
Git是目前世界上最先進的分佈式版本控制系統(沒有之一)
拓展知識點
版本控制器的作用:一個項目開發期間,需要不停的提交補丁(BUG修復)和建立分支。這些工作繁瑣,並且消耗大量精力。所以需要一個工具進行管理:版本控制器。
二、 Git和SVN的區別
GIT不僅僅是個版本控制系統,它也是個內容管理系統(CMS),工作管理系統等。
Git 與 SVN 區別點:
1、GIT是分佈式的,SVN不是
:這是GIT和其它非分佈式的版本控制系統,例如SVN,CVS等,最核心的區別。
2、GIT把內容按元數據方式存儲,而SVN是按文件
:所有的資源控制系統都是把文件的元信息隱藏在一個類似.svn,.cvs等的文件夾裏。
3、GIT分支和SVN的分支不同
:分支在SVN中一點不特別,就是版本庫中的另外的一個目錄。
4、GIT沒有一個全局的版本號,而SVN有
:目前爲止這是跟SVN相比GIT缺少的最大的一個特徵。
5、GIT的內容完整性要優於SVN:
GIT的內容存儲使用的是SHA-1哈希算法。這能確保代碼內容的完整性,確保在遇到磁盤故障和網絡問題時降低對版本庫的破壞。
小結 :分佈式 - 存儲數據的方式 - 分支 - 版本號 內容完整性
三、Git工作流程
參考網上常見的圖解:常見的基礎概念
- Workspace:工作區: 就是你的工作目錄
- Index / Stage:暫存區: 它像個緩存區域,臨時保存你的改動
- Repository:倉庫區(或本地倉庫)
- Remote:遠程倉庫
ps: 本地倉庫和遠程倉庫在本質上沒有太大區別,只不過一個是本地電腦,一個是遠程電腦.
工作流程
1、git clone 克隆遠程資源到本地目錄,作爲工作目錄;克隆
2、然後在本地的克隆目錄上添加或修改文件;修改
3、如果遠程修改了,需要同步遠程的內容,直接git pull就可以更新本地的文件;跟新
4、本地在修改之後,可以通過git status 查看修改的文件。然後使用git add 添加修改的文件暫到緩衝區;git add添加到緩存
5、在添加之後,可以使用git commit添加到當前的工作區;git commit添加到工作區
6、在修改完成後,如果發現錯誤,可以撤回提交併再次修改並提交;
7、git push將本地的修改推送到遠程的git服務器。git push
HEAD:相當於一個指針,指向你最近一次提交後的結果
- git status 查看狀態
- git add . 添加到暫存區
- git commit - m"" 用於提交暫存區的文件
- 簡寫:git commit -a -m “” 用於提交跟蹤過的文件,相當於git add和git commit -m的組合技
- git log 查看提交歷史
Git的基本工作流程:修改--暫存--提交更新
1、在工作目錄中修改文件
2、暫存文件,將文件的快照放入暫存區域
3、提交更新,找到暫存區域的文件,將快照永久性存儲到Git倉庫目錄
關於遠程代碼倉庫
通過之前對git代碼倉庫的描述,我們知道git commit其實只是提交了新版本到本地代碼倉庫,要想其他人看到你的改動,之後必須push到一個公開的server上纔可以。實際上這臺server上的代碼倉庫和你本地的代碼倉庫並無二致,只是大家都用這個server上的代碼倉庫作爲標準版本而已。
四、git涉及到的概念詳解
1、工作區:就是你在電腦裏能看到的目錄。
2、暫存區:英文叫stage, 或index。一般存放在 “.git目錄下” 下的index文件
(.git/index)中,所以我們把暫存區有時也叫作索引(index)。
3、版本庫:工作區有一個隱藏目錄.git,這個不算工作區,而是Git的版本庫
Git的三種狀態:
①已提交(committed):表示數據已經安全的保存在本地數據庫中
②已修改(modified):表示修改了文件,但還沒保存到數據庫中
③已暫存(staged):表示對一個已修改文件的當前版本做了標記,使之包含在下次提交的快照中
如果Git目錄中保存着的特定版本文件,就屬於已提交狀態
如果作了修改並已放入暫存區域,就屬於已暫存狀態
如果自上次取出後,作了修改但還沒有放到暫存區域,就是已修改狀態
初次接觸:我的困惑關於master分支和develop分支區別
master分支和develop分支
首先要知道master和develop並行。
master上始終是最穩定的代碼,develop是正在開發的代碼。
master分支:master分支只負責管理髮布的狀態。在提交時使用標籤記錄發佈版本號。
develop分支:develop分支是針對發佈的日常開發分支。剛纔我們已經講解過有合併分支的功用。
拓展案例:多分支A、B、C並行開發時合併策略
場景描述:
項目AB分支同時進行開發時,A分支開發過程中有其他分支B上線,並且B分支上線版本已同步(merge)到master,則須合併已上線版本到正在開發的分支A上,避免A分支上線時覆蓋B分支的代碼,導致功能倒退。
命令行合併步驟:
1.切換到開發分支A:
git checkout 【開發分支】
2.合併master到開發分支(因爲B已經同步到master,於是將master合併到A,保證A上涵蓋B以上線的最新代碼):
git merge --no-ff master
3.將合併後代碼推送到遠程庫:
git push origin 【開發分支】
五、個人開發常用命令
以下總結了Git常見的開發命令並進行了解釋
git init : 初始化本地項目
- 將本地項目初始化 git 項目,直觀表現是在該項目同級目錄下多了 .git 隱藏目錄,其存儲着 git 版本庫相關信息.此後當前項目便具備了本地管理的能力,可以與 git 進行交互.
git clone : 克隆遠程項目
- 同 git init 一樣的作用,也是創建本地倉庫,只不過 git init 是直接將本地項目作爲本地倉庫,而git clone 是將遠程項目克隆到本地並作爲本地倉庫. 由此可見,git clone 比 git init 多了一層遠程倉庫的概念.
git add : 添加文件
- 將工作區的提交記錄添加到暫存區,暫存區是工作區和版本庫交互的橋樑,暫存區積累到一定量的提交記錄時可以批量提交到版本庫,這一點暫存區有點像緩存.
git commit : 提交文件
- 將暫存區的版本提交到版本庫,從而形成工作區->暫存區->版本庫的基本鏈路,本地工作區的版本控制流程大致如此.
git push : 推送文件
- 如果是使用 git clone 命令克隆的本地項目,當工作到一定程度時可能需要將這部分工作成果推送到遠程倉庫,這時候使用 git push命令完成本地版本的推送流程.
特殊情況
- 如果是使用 git init命令初始化的本地項目,可能沒有遠程倉庫,自然也就不需要推送.如果後來創建了遠程倉庫,那麼你自然是想要將本地倉庫推送到遠程倉庫的,因此你需要準確告訴 git 你要推送到哪個遠程倉庫.
- 使用 git remote add origin [email protected]:username/repos.git ;命令添加遠程倉庫信息,這樣就建立了本地倉庫和遠程倉庫的關聯,以後就可以正常推送到遠程倉庫了.
關於分支相關操作:
1、查看分支:git branch -a
2、創建分支,加上-b上創建完分支後,切換的新的分支工作:git checkout -b dev
這時候修改的文件都是在dev分支,不會對master分支的文件進行修改。
3、合併分支
git checkout master
git merge dev
The best investment is to invest in yourself
2020.05.14 記錄辰兮的第64篇博客