Git實操
環境準備
- 操作系統: Linux,Windows,MacOS(本文以Linux為教程)
- 安裝Git
sudo apt-get update
sudo apt-get install git
git --version

常用指令介紹
Linux創建目錄&&並進入目錄
mkdir -p hellogit
cd hellogit

設置git的用戶與郵箱(必須設置!!!)
git config --global user.name "tungchiahui"
git config --global user.email tungchiahui@gmail.com
git初始化(使該文件夾被git控制)
git init

創建文件&&查看當前文件夾內的所有文件
touch test.md
ls

編輯文件文本內容
sudo apt-get update
sudo apt-get install vim
vim ./test.md

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

按ESC退出編輯模式

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

查詢當前文件的狀態
git status

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

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

查看已經提交的項目版本
git log

這幾行的意思是tungchiahui(郵箱為tungchiahui@gmail.com)用戶於2023年12月30日週六00:42:47往master分支提交了註解為"version1"的項目版本
可以嘗試對文件內容進行修改,並再次進行提交
vim test.md
git add test.md
git commit -m "version2"
git log


如何忽略掉不想提交的文件
- 首先創建一個文件.gitignore
- 再創建一個文件 絕密文件不想開源.py 並修改裡面的內容
- 查看git狀態
touch .gitignore
touch vinci_secret.py
vim vinci_secret.py
git status


- 修改.gitignore的內容,將不想被提交的文件名寫入該文件
vim .gitignore
git status


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

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

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

- 查看分支是否對其他分支有影響(切換到其他分支查看影響)
git checkout master
ls

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

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

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


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

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


分支合併的衝突
- 為master添加一行內容,並提交
vim test.md
git commit -am "master version4"


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


- 合併分支
git merge master

發生了內容衝突,需要手動修改文本衝突才可以!或者其他辦法也可以解決,可以查詢百度。
遠程倉庫Github
- 打開github官網:https://github.com(如果你打不开,请自己找办法打开)
- 註冊並登錄賬號

- 新建遠程倉庫


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

如果上圖出現,則說明已經創建成功了
- 進行創建文件並提交


填寫好文件名,文件內容,就可以點綠色按鈕進行提交了。然後也可以填寫提交的註釋信息。


- 克隆遠程倉庫到本地

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

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


- 對文件內容進行修改
cd test_repo
vim test1.md



- 查看該本地倉庫與哪些遠程倉庫有聯繫
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

使用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是本次示例的分支名,實際開發時應使用能表達修改內容的名稱。
- 修改文件並提交到本地倉庫
vim test1.md
按下insert按鍵,然後隨便輸入點正文.
例如
TEST11111

然後按下ESC,再輸入:wq進行保存.
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。
vim test1.md
按下insert按鍵,然後修改下正文.
例如
TEST222

然後按下ESC,再輸入:wq進行保存.
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

向沒有寫入權限的倉庫提交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。
VScode + Git
VScode是什麼?
VScode是一個文本編輯器,類似於Vim等編輯器,但是他有圖形界面,有非常多的好用的插件,而且可以集成編譯器環境,最終也可以被用戶自定義配置成Visual Studio那樣的IDE。
VScode官網:
https://code.visualstudio.com/
創建文件夾並在該文件夾下打開VScode

新建文件


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


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

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

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

輸入提交信息,並點對號進行commit
創建新分支,並進入新分支


修改內容

顯示M為修改狀態
查看歷史版本對比(點擊文件)

提交

切換回main分支


合併分支



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

- 輸入倉庫名


- 打開github倉庫查看


使用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會被自動關閉.
