Git快速入门+复习笔记
對于學習編程的同志來說,學習Git是必不可少的一項技術,如果你是第一次觀看我的文章,歡迎關注我的頻道,我會分享更多有趣的知識。
文章目錄
- 1 目標
- 2 概述
- 2.1 開發中的實際場景
- 2.2 版本控制器的方式
- 2.3 工作流程圖
- 3 Git安裝和常用命令
- 3.1 Git環境配置
- 3.1.2 基本配置
- 3.2 獲取本地倉庫
- 3.3 基礎操作指令
- 4 分支
- 4.1 分支命令
- 4.2 解決沖突
- 4.3 開發中分支使用原則和流程
- 5 Git遠程倉庫
- 5.1 創建的托管服務
- 5.2 配置SSH公鑰
- 5.3 遠程倉庫添加
- 5.4 從遠程倉庫克隆
- 5.5 從遠程倉庫中抓取或拉取
- 5.6 解決合并沖突
1 目標
- 了解Git基本概念
- 能夠概述Git的工作流程
- 能夠使用Git常用命令
- 熟悉Git代碼托管服務
- 能夠使用idea操作git
2 概述
2.1 開發中的實際場景
場景一:備份
? 小明備份的模塊快要完成了,就在即將Release之前的一瞬間,電腦突然藍屏,硬盤光榮犧牲,幾個月來的努力付之東流。
場景二:代碼還原
? 這個項目中需要一個很復雜的功能,老王摸索了一個星期終于有眉目了,可是這被改的面目全非的代碼已經回不去從前了。
場景三:協同開發
? 類似于堅果云,但是比堅果云更好用。
場景四:代碼追責
? 項目經理帶著一群程序員做開發,可是某一天出了BUG,但是沒有人愿意承認,這時候找出這個寫出BUG的人至關重要。
2.2 版本控制器的方式
在開始談論版本控制器的方式之前,我們可以看一個小故事。
引用于:Git的誕生 - 廖雪峰的官方網站 (liaoxuefeng.com)
很多人都知道,Linus在1991年創建了開源的Linux,從此,Linux系統不斷發展,已經成為最大的服務器系統軟件了。
Linus雖然創建了Linux,但Linux的壯大是靠全世界熱心的志愿者參與的,這么多人在世界各地為Linux編寫代碼,那Linux的代碼是如何管理的呢?
事實是,在2002年以前,世界各地的志愿者把源代碼文件通過diff的方式發給Linus,然后由Linus本人通過手工方式合并代碼。
在那時候,實際上已經出現了一些版本控制系統如CVS、SVN這些版本控制工具,但是Linus認為其并不好用,因為其是集中式版本控制系統,打個比方,集中式版本控制工具就像是去圖書館借書來做筆記,做完筆記后放回去。雖然有一些商用的版本控制系統比CVS、SVN好用,但那是付費的,和Linux的開源精神不符。
不過,到了2002年,Linux系統已經發展了十年了,代碼庫之大讓Linus很難繼續通過手工方式管理了,社區的弟兄們也對這種方式表達了強烈不滿,于是Linus選擇了一個商業的版本控制系統BitKeeper,BitKeeper的東家BitMover公司出于人道主義精神,授權Linux社區免費使用這個版本控制系統。
安定團結的大好局面在2005年就被打破了,原因是Linux社區牛人聚集,不免沾染了一些梁山好漢的江湖習氣。開發Samba的Andrew試圖破解BitKeeper的協議(這么干的其實也不只他一個),被BitMover公司發現了(監控工作做得不錯!),于是BitMover公司怒了,要收回Linux社區的免費使用權。
Linus可以向BitMover公司道個歉,保證以后嚴格管教弟兄們,嗯,這是不可能的。實際情況是這樣的:
Linus花了兩周時間自己用C寫了一個分布式版本控制系統,這就是Git!一個月之內,Linux系統的源碼已經由Git管理了!牛是怎么定義的呢?大家可以體會一下。
Git迅速成為最流行的分布式版本控制系統,尤其是2008年,GitHub網站上線了,它為開源項目免費提供Git存儲,無數開源項目開始遷移至GitHub,包括jQuery,PHP,Ruby等等。
歷史就是這么偶然,如果不是當年BitMover公司威脅Linux社區,可能現在我們就沒有免費而超級好用的Git了。
集中式版本控制工具
集中式版本控制工具,版本庫是集中存放在中央服務器的,team里每個人work時從中央服務器下載代碼,這個過程必須聯網,個人修改后然后提交到中央版本庫。所以,這和去百度網盤寫筆記沒啥兩樣。例如SVN和CVS。
分布式版本控制工具
分布式版本控制工具沒有“中央服務器”,每個人的電腦就是一個完整的版本庫,這樣工作的時候,無需聯網,多人協作只需要各自的修改推送給對方,就能互相看到修改內容了。例如Git。
2.3 工作流程圖
3 Git安裝和常用命令
本教程的git命令例子都是在Git Bash中演示的,會用到一些基本的Linux指令,這個如果不熟悉請移步Linux筆記查看。
3.1 Git環境配置
3.1.2 基本配置
- 打開Git Bash
- 設置用戶信息
- git config user.name "名字"
- git config user.email "郵箱"
- 查看配置信息
- git config --global user.name
- git config --global user.email
3.2 獲取本地倉庫
要使用Git對我們的代碼進行版本控制,首先需要獲得本地倉庫。創建倉庫的過程分為以下幾個步驟:
3.3 基礎操作指令
Git工作目錄下對于文件的修改會存在幾個狀態,這些修改的狀態會隨著我們執行Git的命令而發生變化。
如果需要由工作區上傳至暫存區,那么可以用git add。
如果需要由暫存區上傳至本地倉庫,可以用git commit。
常用指令
| git log 參數 | 查看提交日志 |
| git add 單個文件名 | 通配符 | 添加一個文件或多個文件的修改到暫存區 |
| git commit -m “注釋內容” | 提交暫存區內容到本地倉庫的當前分支 |
| git status | 查看當前修改的狀態 |
| git reset --hard commitID | 版本回退,其中commitID可以在log里面查看 |
| git reflog | 查看刪除 |
| git reflog | 可以看到已經刪除的提交記錄 |
git log參數
| –all | 顯示所有分支 |
| –pretty=oneline | 將提交信息顯示為一行 |
| –abbrev-commit | 使得輸出的commitld更簡短 |
| –graph | 以圖的形式顯示 |
如果想讓倉庫的某些文件不用git替我們管理,可以創建.gitignore文件,然后用vim編輯器打開添加需要忽略的文件名即可。
4 分支
幾乎所有的版本控制系統都以某種形式支持分支。使用分支意味著你可以把你的工作從開發主線上來進行重大的bug修改,開發新的功能,以免影響開發主線。
4.1 分支命令
分支命令
| git branch | 查看本地分支 |
| git branch 分支名 | 創建本地分支 |
| git checkout 分支名 | 切換分支 |
| git checkout -b 分支名 | 創建并且切換到分支 |
| git merge 分支名 | 一個分支的提交可以合并到另外一個分支 |
| git branch -d 分支名 | 刪除分支時,需要做各種檢查 |
| git branch -D 分支名 | 不做任何檢查,強制刪除 |
4.2 解決沖突
當兩個分支上對文件的修改可能會存在沖突,例如同時修改了同一個文件的同一行,這時就需要手動解決沖突,解決沖突步驟如下:
- 處理文件中沖突的地方
- 將解決完沖突的文件加入暫存區
- 提交到倉庫
4.3 開發中分支使用原則和流程
幾乎所有的版本控制系統都以某種形式支持分支。使用分支意味著你可以把你的工作從開發主線上分離開進行重大的BUG修改,開發新的功能,以免影響開發主線。
在開發中,一般有如下分支使用遠程和流程:
-
master(生產)分支
線上分支、主分支、中小規模項目作為線上運行的應用對應的分支。
-
develop(開發)分支
是從master創建的分支,一般作為開發部門的主要開發分支,如果沒有其他并行開發不同期上線要求,都可以在此版本進行開發,階段開發完成后,需要合并到master分支,準備上線。
-
feature/xxxx分支
從develop創建的分支,一般是同期并行開發,但不同期上線時創建的分支,分支上的研發任務完成后合并到develop分支。
-
hotfix/xxxx分支
從master派生的分支,一般作為線上Bug修復使用,修復完成后需要合并到master、test、develop分支。
-
還有一些其他分支,在此不再詳述,例如test分支(用于代碼測試)、pre(預上線分支)等等。
5 Git遠程倉庫
5.1 創建的托管服務
前面我們已經知道Git中存在兩種類型的倉庫,即本地倉庫和遠程倉庫。那么我們如何搭建Git遠程倉庫呢?我們可以借助互聯網上提供的一些代碼托管服務來實現,其中比較常用的有GitHub、碼云、GitLab等
gitHub:是一個面向開源及私有軟件項目的托管平臺,因為只支持Git作為唯一的版本庫格式進行托管,故名gitHub。
Gitee(碼云):是國內的一個代碼托管平臺,由于服務器在國內,所以相比于GitHub,碼云速度更快。
GitLab:是一個用于倉庫管理系統的開源項目,使用Git作為代碼管理工具,并在此基礎上搭建起來的web服務,一般用于企業、學校等內部網絡搭建git私服。
5.2 配置SSH公鑰
學過Linux的都知道,SSH可以用于遠程控制。碼云基于SSH進行遠程傳輸,所以配置好公鑰后,大家都可以利用這個公鑰互相傳輸東西。
生成SSH公鑰
ssh-keygen -t rsa
不斷回車,如果公鑰已經存在,則自動覆蓋。
獲取公鑰
cat ~/.ssh/id_rsa.pub
獲取好后,如果想連接碼云端的倉庫,只需按下圖所示:
此時如果想驗證是否連接碼云成功,可以使用ssh -T git@gitee.com指令,如果彈出確認框,輸入yes即可。
5.3 遠程倉庫添加
這個時候想要把本地倉庫和遠程倉庫綁定,只需輸入下面的指令:
git remote add 遠程倉庫名,通常為origin 倉庫SSH地址
如果想要查看綁定了那些遠程倉庫,只需:
git remote
綁定完成后,我們將本地倉庫推送到遠程倉庫,只需:
git push -f --set-upstream 遠程倉庫名 本地分支名:遠程分支名
如果遠程分支名和本地分支名相同,則可以只寫本地分支,其中-f表示強制覆蓋,–set-upstream用于推送到遠程倉庫的同時并且建立和遠端分支的關聯關系。
如果想要查看本地倉庫和遠程倉庫分支的對應關系,可以使用:
git branch -vv
第一次推得時候如果建立起分支的關系的話,后面則無需寫那么長,只需寫:
git push
5.4 從遠程倉庫克隆
如果有一個遠程倉庫,我們可以直接clone到本地。克隆的命令可用:
git clone 倉庫路徑 本地目錄
其中本地目錄可省略,會自動生成一個目錄
5.5 從遠程倉庫中抓取或拉取
遠程分支可以看成是本地分支,我們也可以進行merge操作,只是需要把遠程倉庫中最新的更新下載到本地,再進行操作。
如果只是抓取,那么其作用是把倉庫中的更新都抓取到本地,不會進行合并,并且如果不指定遠端名稱和分支名,則抓取所有的分支,命令如下:
git fetch 遠程倉庫名 分支名
如果是拉取,那么會將遠端倉庫的修改拉到本地后自動進行合并,相當于fetch+merge,而且如果不指定遠端名稱和分支名,則抓取所有并更新當前分支。
5.6 解決合并沖突
在一段時間,A、B用戶修改了同一個文件,且修改了同一行位置的代碼,此時會發生合并沖突。
A用戶在本地修改代碼后優先推送到遠程倉庫,此時B用戶在本地修訂代碼,提交到本地倉庫后,也需要到遠程倉庫,此時B用戶晚于A用戶,故需要先拉取遠程倉庫的提交,經過合并后才能推送到遠程倉庫分支,如下圖所示:
在B用戶拉取代碼時,因為A、B用戶同一段時間修改了同一個文件的相同位置代碼,故會發生合并沖突。
遠程分支也是分支,所以合并時沖突的解決方式也和解決本地分支沖突相同。
總結
以上是生活随笔為你收集整理的Git快速入门+复习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深度学习中的一些概率函数分布
- 下一篇: 利用html表格制作个人简历