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:

這就合併成功了

內容已經被合併了:

