跳到正文

Wiki

Git實操

約 32 分鐘閱讀

本文由簡體中文內容確定性轉換,並受版本化術語表保護。

1.環境準備

  1. 作業系統: Linux,Windows,MacOS(本文以Linux為教程)

  2. 安裝Git

sudo apt-get update
sudo apt-get install git
git --version

2.常用指令介紹

2.1.Linux建立目錄&&並進入目錄

mkdir -p hellogit
cd hellogit

2.2.設定git的使用者與郵箱(必須設定!!!)

git config --global user.name "tungchiahui"
git config --global user.email tungchiahui@gmail.com

2.3.git初始化(使該資料夾被git控制)

git init

2.4.建立檔案&&檢視當前資料夾內的所有檔案

touch test.md
ls

2.5.編輯檔案文本內容

sudo apt-get update
sudo apt-get install vim
vim ./test.md

接下來按鍵盤上的insert按鍵進入編輯模式&&並輸入一段文本

按ESC退出編輯模式

按shift+冒號按鍵,並輸入wq回車進行儲存退出

2.6.查詢當前檔案的狀態

git status

On branch 分支名

Untracked是指檔案在工作區

2.7.將檔案提交到暫存區

git add test.md

2.8.將檔案提交至本地倉庫

git commit -m "version1"  
#git commit -m "提交的信息(可以理解为是注释)"

2.9.檢視已經提交的專案版本

git log

這幾行的意思是tungchiahui(郵箱為tungchiahui@gmail.com)使用者於2023年12月30日週六00:42:47往master分支提交了註解為"version1"的專案版本

2.10.可以嘗試對檔案內容進行修改,並再次進行提交

vim test.md
git add test.md
git commit -m "version2"
git log

2.11.如何忽略掉不想提交的檔案

  1. 首先建立一個檔案.gitignore

  2. 再建立一個檔案 絕密檔案不想開源.py 並修改裡面的內容

  3. 檢視git狀態

touch .gitignore
touch vinci_secret.py
vim vinci_secret.py
git status

  1. 修改.gitignore的內容,將不想被提交的檔名寫入該檔案
vim .gitignore
git status

2.12.分支基本操作

  1. 分支的作用:開闢專案的一個新倉庫分支,與master等其他分支是獨立的,可以進行獨立的add、commit和diff、clone。

  2. 建立分支

git branch route2
#git branch 分支名
  1. 進入分支
git checkout route2
#git checkout 分支名
  1. 查詢有多少分支,並查詢目前為哪一個分支
git branch

當前分支檔案會完美繼承master分支的檔案

  1. 刪除掉該分支下的檔案
ls
rm -rf test.md
rm -rf vinci_secret.py
ls

  1. 將該分支往本地倉庫進行提交
git commit -a -m "删库跑路"
#该指令是把git add和git commit指令一起写

  1. 檢視分支是否對其他分支有影響(切換到其他分支檢視影響)
git checkout master
ls

可以發現,在route2分支中被刪掉的test.md檔案回來了,但是同樣被刪掉的vinci_sercet.py檔案沒回來,是因為該檔案在提交時被.gitignore檔案遮蔽了,不會被提交到本地倉庫

  1. 刪除分支
git branch -D route2
#git branch -D 分支名

  1. 建立分支並立馬切換到分支
git checkout -b route3

2.13.分支的合併

  1. 在route3分支中修改檔案內容並提交
vim test.md
git commit -am "route3 version3"
#-a -m也可以被省略成-am

  1. 切換到master分支
git checkout master
vim test.md

  1. 將route3分支合併到當前分支上
git merge route3
#git merge 被合并的分支名
vim test.md

2.14.分支合併的衝突

  1. 為master新增一行內容,並提交
vim test.md
git commit -am "master version4"

  1. 切換到route3分支,並新增內容並提交
git checkout route3
vim test.md
git commit -am "route3 version4"

  1. 合併分支
git merge master

發生了內容衝突,需要手動修改文本衝突才可以!或者其他辦法也可以解決,可以查詢百度。

2.15.遠端倉庫Github

  1. 開啟github官網:https://github.com(如果你打不開,請自己找辦法開啟)

  2. 註冊並登入賬號

  1. 新建遠端倉庫

這個介面建議詳細設定一下,但這裡是演示,所以只設置了倉庫名稱,其他選項為預設操作。

如果上圖出現,則說明已經建立成功了

  1. 進行建立檔案並提交

填寫好檔名,檔案內容,就可以點綠色按鈕進行提交了。然後也可以填寫提交的註釋資訊。

  1. 克隆遠端倉庫到本地

cd
mkdir repo_floder
cd repo_floder
git clone https://github.com/tungchiahui/test_repo.git

如果出錯,請檢查是否能正常訪問github!

  1. 對檔案內容進行修改
cd test_repo
vim test1.md

  1. 檢視該本地倉庫與哪些遠端倉庫有聯絡
git remote -v

  1. 將本地倉庫push到遠端倉庫
git push

這裡需要你輸入github的使用者名稱與密碼,使用者名稱則為github使用者名稱,但是密碼則為github使用者token,生成token的步驟如下:

Note隨便填,有效日期選擇沒有截止時間。

下面能勾的勾全勾上,這是許可權。

複製token並填入password中(token在終端中輸入會被隱藏,輸完直接回車即可)

  1. 檢視遠端倉庫

發現檔案已經被修改了!

  1. 對遠端倉庫內容進行修改

  1. 將遠端倉庫內容拉到本地倉庫
git fetch

  1. 檢視本地與遠端倉庫區別
git diff origin/main
#git diff 远程仓库名/分支名

  1. 如果發現內容沒問題,就可以將遠端倉庫內容同步到工作區
git pull

  1. 檢視專案修改歷史
git log

2.16.使用Pull Request合併程式碼

Pull Request簡稱PR,用於請求將一個分支中的修改合併到另一個分支。PR可以讓專案成員在合併前檢視程式碼變化、留言討論和進行審查,因此團隊協作時通常不會直接將未審查的程式碼push到main分支。

  1. 從main分支建立並進入一個功能分支
git checkout main
git pull origin main
git checkout -b feature/pr-demo

feature/pr-demo是本次示例的分支名,實際開發時應使用能表達修改內容的名稱。

  1. 修改檔案並提交到本地倉庫
vim test1.md

按下insert按鍵,然後隨便輸入點正文.

例如

TEST11111

然後按下ESC,再輸入:wq進行儲存.

git add test1.md
git commit -m "修改test1文件"
  1. 將功能分支推送到Github
git push -u origin feature/pr-demo

-u會建立本地分支與遠端分支的跟蹤關係,之後在該分支上可以直接使用git push

  1. 在Github倉庫頁面建立PR

推送新分支後,Github倉庫頁面通常會顯示Compare & pull request按鈕,點選該按鈕。如果沒有顯示,也可以進入倉庫的Pull requests頁面,點選New pull request

確認兩個分支選擇正確:

  • base: main:修改最終要合併到的目標分支。
  • compare: feature/pr-demo:包含本次修改的來源分支。

PR只能在兩個不同的分支之間建立。確認下方顯示的提交和檔案變化沒有問題後,填寫PR標題和說明,再點選Create pull request

  1. 審查並繼續修改PR

建立PR後,可以在Files changed頁面檢視本次修改,也可以邀請其他專案成員進行Review。

如果審查後需要繼續修改,不需要重新建立PR。只需在同一個功能分支上繼續提交併push,新的提交會自動加入當前PR。

vim test1.md

按下insert按鍵,然後修改下正文.

例如

TEST222

然後按下ESC,再輸入:wq進行儲存.

git add test1.md
git commit -m "根据Review意见修改"
git push

你會發現又多了一個commit如下圖.

點選Files changed頁面檢視本次修改:

  1. 合併PR

審查通過且程式碼沒有衝突時,擁有倉庫寫入許可權的成員可以點選Merge pull request,再點選Confirm merge完成合並。倉庫如果設定了審查或自動測試規則,需要先滿足這些條件才能合併。

  1. 同步main分支並刪除已合併的分支

合併成功後,可以在PR頁面點選Delete branch刪除Github上的功能分支。然後返回終端,更新本地main分支並刪除本地功能分支。

git checkout main
git pull origin main
git branch -d feature/pr-demo

2.17.向沒有寫入許可權的倉庫提交PR

如果想向其他人的開源專案貢獻程式碼,通常沒有許可權直接將分支push到對方的倉庫。此時需要先在Github上點選Fork,將該倉庫複製到自己的賬號下。

Fork完成後,克隆自己的倉庫並記錄原倉庫地址:

git clone https://github.com/你的Github用户名/仓库名.git
cd 仓库名
git remote add upstream https://github.com/原仓库用户名/仓库名.git
git remote -v

其中origin指向自己Fork出來的倉庫,upstream指向原倉庫。接下來仍然需要建立功能分支,不要直接在main分支上修改。

git checkout -b feature/pr-demo
# 修改文件后提交
git add .
git commit -m "添加示例功能"
git push -u origin feature/pr-demo

推送後在Github上建立PR,並特別確認:

  • base repository是對方的原倉庫,base是對方要接收修改的分支。
  • head repository是自己Fork的倉庫,compare是自己剛剛推送的功能分支。

之後填寫標題和修改說明,點選Create pull request即可向原專案提交PR。

3.VScode + Git

3.1.VScode是什麼?

VScode是一個文本編輯器,類似於Vim等編輯器,但是他有圖形介面,有非常多的好用的外掛,而且可以整合編譯器環境,最終也可以被使用者自定義配置成Visual Studio那樣的IDE。

3.2.VScode官網:

https://code.visualstudio.com/

3.3.建立資料夾並在該資料夾下開啟VScode

3.4.新建檔案

3.5.初始化Git(類似於git init命令)

U是指未追蹤狀態,也就是檔案還在工作區

3.6.將檔案提交到暫存區(類似git add)

3.7.取消提交到暫存區點減號(這裡不取消)

A是added表示在暫存區

3.8.進行提交(類似於commit)

輸入提交資訊,並點對號進行commit

3.9.建立新分支,並進入新分支

3.10.修改內容

顯示M為修改狀態

3.11.檢視歷史版本對比(點選檔案)

3.12.提交

3.13.切換回main分支

3.14.合併分支

3.15.Push到Github遠端倉庫

  1. 在下面這個介面找到 Publish to Github,可能會彈出來點選Sign In,然後按提示在瀏覽器中完成Github授權。

  1. 輸入倉庫名

  1. 開啟github倉庫檢視

3.16.使用VScode圖形化提交Pull Request

本節演示如何使用VScode建立、審查和合並Pull Request,整個過程不需要在終端輸入Git指令。

注意:如果要使用Pull Request,功能分支提交完成後不要執行上文的“切換回main分支”和“合併分支”操作。應當將功能分支保持獨立,通過PR審查後再合併到main分支。

  1. 安裝Github Pull Requests擴充套件

開啟VScode左側的擴充套件頁面,搜尋GitHub Pull Requests,安裝由Github釋出的GitHub Pull Requests擴充套件。

  1. 從main建立功能分支

先點選VScode左下角的當前分支名,切換到main分支。在原始碼管理頁面點選選擇Pull,保證本地main分支與Github上的內容一致。

再次點選左下角的分支名,選擇Create new branch from...,選擇main作為起點,然後輸入一個能表達修改內容的分支名,例如feature/pr-demo。建立後VScode會自動切換到該分支。

  1. 修改檔案並提交

在功能分支中修改檔案並儲存,然後開啟原始碼管理頁面:

  • 點選檔案右側的+,將修改加入暫存區。
  • 在上方輸入提交資訊,例如Add PR demo
  • 點選Commit完成本地提交。

commit後變為

  1. 在VScode中建立PR

開啟左側的Github Pull Requests頁面,點選Create Pull Request。也可以按Ctrl+Shift+P開啟命令面板,執行GitHub Pull Requests: Create Pull Request

  1. 填寫PR資訊

在Create Pull Request頁面中檢查以下內容:

  • Base Repository:接收修改的Github倉庫。
  • Base Branch:要合併進入的目標分支,通常為main。
  • 來源分支:當前的功能分支,例如feature/pr-demo
  • Title:簡潔描述本次修改。
  • Description:說明修改原因、主要內容和驗證方法。

也可以根據需要新增Reviewers、Assignees和Labels。檢查無誤後點擊Create提交PR;如果修改還沒有完成,可以選擇Create Draft建立草稿PR。

如果當前分支還沒有推送到Github,VScode會提示釋出分支。選擇publish branch即可將當前功能分支推送到遠端倉庫。

  1. 審查並修改PR

建立成功後,VScode會進入PR的Review Mode。在這裡可以檢視提交記錄和檔案差異、留言、邀請審查,也可以繼續修改程式碼。

可以檢視合併差異:

如果需要根據審查意見修改程式碼,保持在當前功能分支上,然後繼續使用原始碼管理頁面進行Commit.也就是可以繼續修改.

同樣先add再commit本次修改,可以命名為Add PR demo2.

最後Push。新的提交會自動加入當前PR,不需要重新建立PR。

可以看到如圖,兩次commit都被PR包含了.

也可以看到檔案差異裡,兩次提交都被可以被合併到main了.

  1. 合併PR並清理分支

審查通過且自動檢查完成後,擁有倉庫寫入許可權的成員可以在PR詳情頁點選Merge完成合並。

合併完成後,VScode會提示刪除遠端和本地的功能分支。確認PR已經正確合併後再進行刪除,最後切換回main分支並點選Pull獲取最新程式碼。

緊接著PR會被自動關閉.