1. 程式人生 > 實用技巧 >Git操作說明

Git操作說明

Day15 Git 課堂筆記

1 Git 介紹

Git 是一款開源免費的分散式的版本控制系統。是 Linux 之父 Linus Torvalds(林納斯·託瓦茲)為了方便管理 linux 程式碼程式碼而開發的。

Git 可以實現的功能:

  • 程式碼備份

  • 版本回退

  • 多人協作

  • 許可權控制

Git 工具下載地址:https://git-scm.com/

GIt 官方文件地址:https://git-scm.com/book/zh/v2

2 Git 準備工作

2.1 常用 Linux 操作

① 常用 Linux 命令

ls      列出當前目錄下所有的檔案和目錄
命令選項:
-a 列出當前目錄下的包括隱藏檔案在內的所有檔案和目錄
-l 列出當前目錄下的檔案和目錄的詳細資訊
-al 列出當前目錄下的包括隱藏檔案在內的所有檔案和目錄的詳細資訊


cd 目錄路徑 進入指定的目錄
cd .. 表示進入上一個目錄


mkdir 目錄名 建立一個目錄

touch 檔名 建立一個檔案

cat 檔名 快速讀取檔案中的內容(適合檔案中的內容不是太多)

mv 舊的名字 新的名字 重新命名檔案或目錄

rm -rf 路徑 刪除檔案或目錄

clear 清空當前的命令列工具

② 常用快捷鍵

tab     路徑補全

ctrl + L 清空當前的命令列工具

ctrl + C 結束當前正在執行命令

鍵盤上下方向鍵 檢視歷史命令

2.2 Vim 的使用

vim 可以用來讀取、編輯檔案內容,使用 vim 命令開啟檔案。

如果 vim 開啟的檔案的不存在,會自動建立。

vim 檔名

vi/vim 共分為三種模式,分別是命令模式(Command mode)輸入模式(Insert mode)底線命令模式(Last line mode)

① 命令模式

vim 檔名 開啟檔案之後,進入的就是命令模式; 在命令模式下不可編輯內容。

常用命令:

  • i 命令,可以進入輸入模式。

  • x 命令,刪除當前游標後面的字元。

  • : 命令,可以進入底線命令模式。

② 輸入模式

在命令模式下,輸入 i 命令可以進入輸入模式,

在輸入模式下,可以編輯文字內容。

ESC 可以退出輸入模式,回撥命令模式。

③ 底線命令模式

在命令模式下,輸入 : 可以進入底線命令模式。

在底線命令模式下,可以進行儲存或退出。

  • w 命令,儲存。按完回車執行,回到命令模式。

  • q 命令,退出,如果沒有沒存是無法退出的,如果要強制退出,可以使用 q!,可以不儲存就退出。

  • wq 命令,儲存並退出。可以使用 wq! 表示強制儲存並退出。

3 Git 基礎概念

3.1 .git 目錄 倉庫目錄

  • hooks 目錄包含客戶端或服務端的鉤子指令碼,在特定操作下自動執行。

  • info 包含一個全域性性排除檔案,可以配置檔案忽略。

  • logs 儲存日誌資訊。

  • objects 目錄儲存所有資料內容,本地的版本庫存放位置。

  • refs 目錄儲存指向資料的提交物件的指標(分支)。

  • config 檔案包含專案特有的配置選項。

  • description 用來顯示對倉庫的描述資訊。

  • HEAD 檔案指示目前被檢出的分支。

  • index 暫存區資料。

切記: 不要手動去修改 .git 資料夾中的內容。

3.2 Git 倉庫的三個區域

  • 工作區 (程式碼編輯區)

  • 暫存區 (修改待提交區)

  • 版本庫(程式碼儲存區)

4 Git 基礎命令總結

4.1 初始化配置

git 工具安裝完成之後,要先進性一次初始化配置;只配置一次集合,以後不需要配置。

git config --global user.name "Your Name"
git config --global user.email "[email protected]"

如果要查詢配置的情況,可以使用以下命令:

git config -l

4.2 倉庫初始化

git init

每個專案都要進行一個倉庫初始化,通過倉庫的初始化可以建立與該專案對應的倉庫。

會在當前的目下建立一個 .git 目錄,.git 目錄是個·隱藏檔案,該目錄就是倉庫目錄。

4.3 檢視狀態

git status

4.4 新增暫存區

git add <file> # 新增指定檔案到暫存區
git add -u # 提交所有被刪除或被修改的檔案到暫存區(不包括新增檔案)。
git add . # 提交所有修改和新建的檔案到暫存區(不包括刪除的檔案)。
git add -A # 提交所有被刪除、被替換、被修改和新增的檔案到暫存區。 推薦!!!

4.5 提交版本庫

git commit -m '註釋資訊'  # 提交暫存區到版本庫並註釋。 
git commit -a -m '註釋' #一步新增且提交修改。(新增的檔案不會提交)

4.6 檢視暫存前後具體的變化

git diff    # 檢視工作區(沒有新增快取的)和版本庫的差異 (不會顯示新新增的檔案)
git diff --cached # 檢視暫存區和版本庫的差異

4.7 撤銷修改和撤銷暫存

git resotre <file>  # 撤銷工作區中的修改,指定檔案,會與版本庫對比 (無法撤銷新增的檔案)
git restore . # 撤銷工作區中所有的修改;會與版本庫對比 (無法撤銷新增的檔案)

git restore --staged <file> # 指定檔案,把修改從暫存區撤銷
git restore --staged . # 把所有修改從暫存區撤銷
# 舊的 git 命令
git checkout -- <file> # 同 git restore <file> 作用一致
git checkout -- . # 同 git restore . 作用一致

4.8 歷史版本回滾

① 檢視歷史版本號

git log     # 檢視所有歷史版本號
git log -n # 查詢最近的前 n 次提交的版本號;n 是數字。
git log --oneline # 查詢所有歷史版本號,在一行顯示;版本號只顯示前七位
git reflog  # 檢視包括已刪除的版本在內所有的歷史版本號!

② 通過指定版本號回滾

git reset --hard b815fd5a6ae655b521a31a9

注意:

進行版本回退時,不需要使用完整的 commitId(版本號),前七位即可。

版本切換之前,要提交當前的修改狀到倉庫。

③ 快捷回滾

git reset --hard HEAD^  # 恢復到上個版本
git reset --hard HEAD^^ # 恢復到上上個版本
git reset --hard HEAD^^^ # 恢復到上上上個版本

5 忽略檔案

5.1 被忽略的檔案

專案目中有些檔案是不需要進入版本庫中,比如編輯器的配置。

忽略檔案的原則是:

  1. 忽略作業系統自動生成的檔案,比如縮圖等;

  2. 忽略編譯生成的中間檔案、可執行檔案等,也就是如果一個檔案是通過另一個檔案自動生成的,那自動生成的檔案就沒必要放進版本庫,比如 Java 編譯產生的.class檔案;

  3. 忽略你自己的帶有敏感資訊的配置檔案,比如存放口令的配置檔案。

5.2 設定忽略檔案 .gitignore

在該檔案中配置想要忽略的檔案

該檔案可以放在專案內的任意目錄下,放在哪個目錄只對哪個目錄以及子目錄進行設定。

通常,忽略檔案放在專案目錄下。

5.3 忽略檔案的語法

  1. 空格不匹配任意檔案,可作為分隔符,可用反斜槓轉義。(空格沒意義)

  2. # 開頭的檔案標識註釋,可以使用反斜槓進行轉義。

  3. ! 開頭的模式標識否定,該檔案將會再次被包含,如果排除了該檔案的父級目錄,則使用 ! 也不會再次被包含。可以使用反斜槓進行轉義。

  4. / 結束的模式只匹配目錄以及在該目錄路徑下的內容。(不加也可以)

  5. / 開始的模式匹配當前目錄下的,(.gitignore 檔案所在的目錄)

  6. ** 匹配多級目錄,可在開始,中間,結束。

  7. * 匹配任意數量的任意字串。

  8. ? 通用匹配單個字元。

  9. [] 通用匹配單個字元列表。

以用git check-ignore <file> 命令檢查 .gitignore檔案格式是否正確。

git check-ignore .gitignore

5.4 忽略檔案配置示例

# 忽略 readme.md 檔案 (目錄下自己子目錄所有的 readme.md)
readme.md

# 忽略當前目錄下的 readme.md
/readme.md

# 忽略所有以 html 為字尾的檔案
*.html

# 忽略當前目錄下 以 html 為字尾的檔案
/*.html

# 忽略目錄
configs/

# 忽略當前目錄下的 指定目錄
/configs/


# 忽略所有的 以html為字尾的檔案,除了 index.html
*.html
!index.html

# ? 匹配一個任意字元; * 匹配任意數量的任意字元
??.html

# .html 的前面只能有一個字元,該字元可以是 a、b或c
[abc].html


# 忽略 static 目錄下的 以html為字尾的檔案(只是static目錄下,不包括子目錄)
static/*.html

# 忽略 static 下以及子目錄下 以 html 為字尾的檔案
static/**/*.html

6 Git 分支

6.1 分支介紹

分支並非 Git 的專利,幾乎所有的版本控制系統都以某種形式支援分支。

使用分支意味著你可以把你的工作從開發主線上分離開來,以免影響開發主線。

6.2 分支操作

① 建立分支

git branch <nmae>

② 切換分支

git switch <nmae>
# 或者
git checkout <name>

③ 建立並切換到該分支

git switch -c <name>
# 或者
git checkout -b <name>

④ 檢視分支

git branch

⑤ 刪除分支

git branch -d <name>    # 分支能被刪除的前提是,以及合併到了其他分支
git branch -D <name> # 強制刪除分支

⑥ 合併分支

git merge <name>    # 把指定的分支合併到當前分支
git merge <name1> <name2> <name3> # 合併多個分支到當前分支

把 shopcart 分支合併到 dev 分支,本質會在 dev 分支上做一次提交。

shopcart 在合併到 dev 之前,一定要把自己的修改都提交的。

6.3 合併分支衝突解決

發生衝突的原因: 兩個分支對同一個檔案進行了修改,合併的時候必然衝突。

解決衝突: 合併之後,處於 mergeing 狀態,手動修改程式碼解決衝突,新增並提交。

7 GitHub - Git 遠端倉庫

7.1 GitHub 介紹

Hub 是一個程式碼倉庫的託管平臺,因為只支援 Git 作為唯一的版本庫格式進行託管,故名 GitHub。可以建立遠端中心倉庫,為多人合作開發提供便利。

目前,其註冊使用者已經超過 350 萬,託管版本數量也是非常之多,其中不乏知名開源專案 Ruby on Rails、jQuery、python等。

2018 年 6 月 4 日,微軟宣佈,通過 75 億美元的股票交易收購程式碼託管平臺 GitHub。

網址:https://github.com

從搜尋框,輸入,可以檢視星數十萬以上,會從高到低排列

stars:>100000

7.2 GitHub 使用流程

① 場景一: 本地有倉庫 遠端沒有倉庫

  1. 註冊並登陸 GitHub 賬號。

  2. 在GitHub上,建立遠端倉庫。

  3. 獲取遠端倉庫的地址。

  4. 本地配置遠端倉庫的地址

    git remote add origin  https://github.com/unclealan/test2.git
    
    # 如果地址新增錯了,需要刪除再重新新增
    git remote rm origin  # 刪除 origin

    origin 相當於 地址的別名

  5. 本地提交(保證在進行同步之前,本地已經提交)

  6. 向遠端倉庫推送

    git push -u origin master

    -u origin 可以記錄遠端倉庫的地址,以後推送的的時候只執行 git push 即可

    master 表示提交到遠端倉庫的 master 分支。

② 場景二: 本地沒倉庫 遠端有倉庫

  1. 註冊並登陸 GitHub 賬號。

  2. 獲取遠端倉庫的地址。

  3. 把遠端倉庫克隆到本地

    git clone  https://github.com/unclealan/test2.git
  4. 本地可以進行 push 操作以及 pull 操作。 無需再指定地址,因為克隆的時候自動指定了。

7.3 多人合作

① 建立組織配置許可權

首頁 -> 右上角 `+` 號 -> new Organization
免費計劃
填寫組織名稱和聯絡方式(不用使用中文名稱)
邀請其他開發者進入組織(會有郵件邀請,==如收不到,請檢視垃圾箱==)
配置組織許可權,組織首頁右側  settings -> Member privileges -> 選擇 write

② 多人合作工作流程

第一天:

1. 克隆遠端倉庫
2. 進行本地操作,修改程式碼,新增提交,分支操作
3. 下班之前 先 git pull
4. 最後 git push

推送的時候一定先拉取。

如果遠端倉庫的版本比本地版本高,是無法推送的。所以一定先拉取。

第二天:

1. 早上 git pull
2. 進行本地操作
3. 下班之前 先 git pull
4. 最後 git push

③ 衝突解決

衝突原因: 兩個人向同一個分支提交,修改了相同的檔案; 第一推送的會成功推送,第二個人在拉取的時候就會報錯。

解決衝突: 手動修改程式碼,再次新增提交(遠端倉庫的分支就可以合併到本地分支)。

7.4 GitHub 免密登入

  1. 在本地建立金鑰對

    ssh-keygen -t rsa -C "[email protected]"
  2. 檔案預設儲存在家目錄(c:/使用者/使用者名稱/.ssh)的 .ssh 資料夾中。

    • id_rsa 私鑰

    • id_rsa.pub 公鑰

  3. 將公鑰(.pub)檔案內容配置到賬號中

    首頁 -> 右上角頭像-> settings -> SSH and GPG keys -> new SSH Key

  4. 使用 git 協議的遠端倉庫地址 [email protected]:unclealan/Myproject03.git

  5. 以後就可以免密操作

8 GitFlow - Git 開發流程

  • Master 主分支。上面只儲存正式釋出的版本

  • Hotfix 線上程式碼 Bug 修復分支。開發完後需要合併回Master和Develop分支,同時在Master上打一個tag

  • Feather 功能分支。當開發某個功能時,建立一個單獨的分支,開發完畢後再合併到 dev 分支

  • Release 分支。待發布分支,Release分支基於Develop分支建立,在這個Release分支上測試,修改Bug

  • Develop 開發分支。開發者都在這個分支上提交程式碼