Wiki
Git實操
本文由簡體中文內容確定性轉換,並受版本化術語表保護。
1.常用指令介紹
本教程同時適用於 Windows 和 Linux。Windows 使用 PowerShell,Linux 使用 Bash。 除特別標註外,以下命令在兩種環境中均可使用。 檔案編輯統一使用 VS Code(沒轍了,為了方便傻逼Windows),修改後請先按
Ctrl+S儲存,再回到終端執行下一步。
1.1.建立目錄並進入目錄
請在你想存放程式碼的資料夾開啟終端並執行以下命令:
mkdir hellogit
cd hellogit

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

1.3.建立並編輯檔案,檢視當前資料夾內的檔案
code test.md
在 VS Code 中隨便輸入一段文本,按 Ctrl+S 儲存。
新檔案只有儲存後才會出現在磁碟上。

回到終端檢視檔案:
ls

1.4.查詢當前檔案的狀態
git status

On branch 分支名
Untracked是指檔案在工作區
1.5.將檔案提交到暫存區
git add test.md

1.6.將檔案提交至本地倉庫
git commit -m "version1"
# git commit -m "提交的信息(可以理解为是注释)"

1.7.檢視已經提交的專案版本
git log

這幾行的意思是tungchiahui(郵箱為tungchiahui@gmail.com)使用者於2023年12月30日週六00:42:47往master分支提交了註解為"version1"的專案版本
1.8.可以嘗試對檔案內容進行修改,並再次進行提交
code test.md
在 VS Code 中隨便修改檔案內容,按 Ctrl+S 儲存,然後回到終端繼續操作。

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

1.9.如何忽略掉不想提交的檔案
-
首先建立一個檔案.gitignore
-
再建立一個檔案 絕密檔案不想上傳的.py 並修改裡面的內容
-
檢視git狀態
code .gitignore
code vinci_secret.py
先在 VS Code 中Ctrl+S儲存空的 .gitignore 檔案,

再為 vinci_secret.py 輸入下面示例內容print("绝密代码")並按 Ctrl+S 儲存,然後回到終端檢視狀態:

git status

- 修改.gitignore的內容,將不想被提交的檔名寫入該檔案
code .gitignore
在 VS Code 中修改檔案內容,按 Ctrl+S 儲存,然後回到終端繼續操作。
.gitignore的內容為vinci_secret.py,代表commit的時候忽略這個檔案。

git status

1.10.分支基本操作
-
分支的作用:開闢專案的一個新倉庫分支,與master等其他分支是獨立的,可以進行獨立的add、commit和diff、clone。
-
建立分支
git branch route2
#git branch 分支名
- 進入分支
git checkout route2
#git checkout 分支名
- 查詢有多少分支,並查詢目前為哪一個分支
git branch

當前分支檔案會完美繼承master分支的檔案
- 刪除掉該分支下的檔案
ls
rm test.md
rm vinci_secret.py
ls

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

- 檢視分支是否對其他分支有影響
git checkout是切換到其他分支,檢視是否有影響
git checkout master
ls

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

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

1.11.分支的合併
- 在route3分支中隨便修改檔案內容並提交
code test.md
在 VS Code 中修改檔案內容,按 Ctrl+S 儲存,然後回到終端繼續操作。
這次修改的內容是放在BBB的下一行,寫一個CCC。

git commit -am "route3 version3"
#-a -m也可以被省略成-am

- 切換到master分支
git checkout master
code test.md
在 VS Code 中檢視當前分支的檔案內容。
發現剛才在 route3 上改成的BBB CCC並沒有被同步到 master ,這裡 master 分支還是BBB

- 將route3分支合併到當前分支上
git merge route3
# git merge 被合并的分支名
code test.md
在 VS Code 中檢視當前分支的檔案內容。

這其實就是把route3寫多寫的那一行給合併到master分支了。
1.12.分支合併的衝突
- 為master新增一行內容,並提交
code test.md
在 VS Code 中修改檔案內容,按 Ctrl+S 儲存,然後回到終端繼續操作。

git commit -am "master version4"

- 切換到route3分支,並新增內容並提交
git checkout route3
code test.md
在 VS Code 中修改檔案內容,按 Ctrl+S 儲存,然後回到終端繼續操作。

git commit -am "route3 version4"

- 合併分支
git merge master

發生了內容衝突,需要手動修改文本衝突才可以!或者其他辦法也可以解決。
因為一邊第三行是DDD,一邊是EEE,內容不一樣,衝突了。
這裡是進階教程裡的,暫時先不用知道如何處理。
1.13.遠端倉庫Github
-
開啟github官網:https://github.com(如果你打不開,請自己找辦法開啟)
-
註冊並登入賬號
註冊賬號就點最底下的create an account即可,按提示操作即可

- 新建遠端倉庫


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

如果上圖出現,則說明已經建立成功了
- 進行建立檔案並提交


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


- 克隆遠端倉庫到本地

找一個空資料夾開啟終端並執行下列命令:
git clone https://github.com/tungchiahui/test_repo.git

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


- 對檔案內容進行修改
cd test_repo
code test1.md
可以看到那會兒在github上寫入的內容:

在 VS Code 中修改檔案內容,按 Ctrl+S 儲存,然後回到終端繼續操作。


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

- 將本地倉庫push到遠端倉庫
git push

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




Note隨便填,有效日期選擇沒有截止時間。
下面能勾的勾全勾上,這是許可權。

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

- 檢視遠端倉庫

發現檔案已經被修改了!
- 對遠端倉庫內容進行修改

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

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

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

- 檢視專案修改歷史
git log

1.14.使用Pull Request合併程式碼
Pull Request簡稱PR,用於請求將一個分支中的修改合併到另一個分支。PR可以讓專案成員在合併前檢視程式碼變化、留言討論和進行審查,因此團隊協作時通常不會直接將未審查的程式碼push到main分支。
- 從main分支建立並進入一個功能分支
git checkout main
git pull origin main
git checkout -b feature/pr-demo
feature/pr-demo是本次示例的分支名,實際開發時應使用能表達修改內容的名稱。
- 修改檔案並提交到本地倉庫
code test1.md
在 VS Code 中輸入一段正文。
例如
测试1
提交新内容啦!
你好!!!
TEST11111

按 Ctrl+S 儲存,然後回到終端繼續操作。
git add test1.md
git commit -m "修改test1文件"
- 將功能分支推送到Github
git push -u origin feature/pr-demo
-u會建立本地分支與遠端分支的跟蹤關係,之後在該分支上可以直接使用git push。

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

確認兩個分支選擇正確:
base: main:修改最終要合併到的目標分支。compare: feature/pr-demo:包含本次修改的來源分支。
PR只能在兩個不同的分支之間建立。確認下方顯示的提交和檔案變化沒有問題後,填寫PR標題和說明,再點選Create pull request。

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


如果審查後需要繼續修改,不需要重新建立PR。只需在同一個功能分支上繼續提交併push,新的提交會自動加入當前PR。
code test1.md
在 VS Code 中修改正文。
例如
测试1
提交新内容啦!
你好!!!
TEST11111
TEST222
按 Ctrl+S 儲存,然後回到終端繼續操作。
git add test1.md
git commit -m "根据Review意见修改"
git push
你會發現又多了一個commit如下圖.

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

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


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


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

1.15.向沒有寫入許可權的倉庫提交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。
2.VScode + Git
2.1.VScode是什麼?
VScode是一個文本編輯器,類似於Vim等編輯器,但是他有圖形介面,有非常多的好用的外掛,而且可以整合編譯器環境,最終也可以被使用者自定義配置成Visual Studio那樣的IDE。
2.2.VScode官網:
https://code.visualstudio.com/
2.3.建立資料夾並在該資料夾下開啟VScode

2.4.新建檔案


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


U是指未追蹤狀態,也就是檔案還在工作區
2.6.將檔案提交到暫存區(類似git add)

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

A是added表示在暫存區
2.8.進行提交(類似於commit)

輸入提交資訊,並點對號進行commit
2.9.建立新分支,並進入新分支


2.10.修改內容

顯示M為修改狀態
2.11.檢視歷史版本對比(點選檔案)

2.12.提交

2.13.切換回main分支


2.14.合併分支



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

- 輸入倉庫名


- 開啟github倉庫檢視


2.16.使用VScode圖形化提交Pull Request
本節演示如何使用VScode建立、審查和合並Pull Request,整個過程不需要在終端輸入Git指令。
注意:如果要使用Pull Request,功能分支提交完成後不要執行上文的“切換回main分支”和“合併分支”操作。應當將功能分支保持獨立,通過PR審查後再合併到main分支。
- 安裝Github Pull Requests擴充套件
開啟VScode左側的擴充套件頁面,搜尋GitHub Pull Requests,安裝由Github釋出的GitHub Pull Requests擴充套件。

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


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





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

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


commit後變為

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

- 填寫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即可將當前功能分支推送到遠端倉庫。

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


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

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

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

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

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

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


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


緊接著PR會被自動關閉.

3.最常用的幾個功能擴充套件
3.1.向無倉庫許可權提交PR
比如我用另一個號新建了一個倉庫,但是我的tungchiahui賬號並沒有這個倉庫的許可權:
https://github.com/dongjiahui0204/TEST_PR
首先要先Fork這個倉庫:


Fork完畢了:

克隆下自己的這個倉庫:
git clone https://github.com/tungchiahui/TEST_PR.git
開啟VScode:
cd ./TEST_PR
code .
建立分支:



隨便起個分支名字:

在新分支裡,隨便編輯點什麼:

然後commit,push提交到你的倉庫。


應該選自己的:

回到自己的倉庫:
https://github.com/tungchiahui/TEST_PR

選擇把自己的tungchiahui/TEST_PR的prprpr分支提交PR到dongjiahui0204/TEST_PR的main分支。

然後你寫一些你提交的是什麼東西寫在這個描述裡,然後好讓人家維護者方便看你提交的是啥。

如下圖你就提交成功了。

接下來,我切換dongjiahui0204賬號介紹維護者如何合併別人提交上來的PR

我可以點合併PR:

這就合併成功了

內容已經被合併了:

