目錄
1 引言
2 直接整理一個常用的流程,而不是死記硬背各種命令
3 解決沖突的說明和理解
4?git fetch的說明和理解
5 真正開發不用Git命令,而是使用VSCode插件管理工程?
1 引言
以前主要用svn,Git用的少,這次再復習一下Git命令。
2 直接整理一個常用的流程,而不是死記硬背各種命令
1. 進入項目目錄
# 如果是第一次下載項目
git clone 倉庫地址.git
cd 項目目錄# 如果不是第一次,直接進入目錄
cd 項目目錄git config user.name "cumtchw" #不要加--global,
git config user.email "your_email@example.com" #不要加--global
#不要加--global以免影響全局,不加--global就相當于只在當前.git/config文件中增加了下面的內容,
[user]name = cumtchweamil = xxxx.com2. 查看 / 操作本地分支
git branch # 查看本地分支
git checkout [branch_name] # 切換到已有分支
git branch [branch_name] # 創建本地分支 基于當前分支的最新提交,創建一個新的本地分支,但不自動切換到這個新分支
git checkout -b [branch_name] # 創建并切換分支 基于當前所在的分支創建一個新分支 feature1,并切換到它3. 切換到主分支并拉取最新代碼(確保干凈)
git checkout main
git pull4. 新建功能分支(feature 名可以自由取)
git checkout -b feature-add-xxx5. 修改代碼(新增、修改或刪除)6. 保存并提交改動
git add .
git status # commit之前最好執行下git status查看當前文件差異狀態
git commit -m "feat: 修改了某某功能"7. 如需解決沖突(主分支有更新、你的開發周期較長時)# 7.1 回到主分支并拉最新代碼git checkout main#這一行一定不能省,否則如果當前在feature分支,那么下面的git merge origin/main是直接把/origin/main給合并到當前分支了。git fetch origin git merge origin/main# 7.2 切換回你的開發分支git checkout feature-add-xxx# 7.3 將主分支合并進來,觸發沖突則解決git merge main8. 查看狀態、提交修改
git add .
git status # commit之前最好執行下git status查看當前文件差異狀態
git commit -m "修復登錄界面崩潰 bug"#git push <遠程主機名> <本地分支名>:<遠程分支名>
9. 推送到遠程倉庫
# 推送本地 feature-add-xxx 到遠程同名分支:把我本地的 feature-add-xxx 分支,推送到遠程倉庫 origin 中去,并讓遠程也建立一個叫 feature-add-xxx 的分支。
git push origin feature-add-xxx10. 登錄 GitLab / GitHub 網頁提交 Merge Request
3 解決沖突的說明和理解
Git解決代碼沖突
1:將本地分支切換到本地默認主分支:
git checkout [master|develop]
2:更新本地默認主分支
git pull [master|develop]
3:切換到提交代碼本地分支
git checkout [branch_name]
4:將本地主分支merge 到當前分支, 此時提示沖突文件
git merge [master|develop]
5:本地解決沖突文件,驗證。
6:Git提交代碼流程,push到遠程分支
問ChatGPT:
這個是不是說,比如我本來git clone了主分支,然后好幾個人都創建了自己的分支然后修改代碼,
然后可能我改的時間太久了,別人已經有人commit以及push并且merge到master了,
然后這時候我要是commit push merge肯定有沖突,所以我先不commit,我先直接在本地先merge解決沖突,
解決完之后,我再commit push以及申請merge,是這個意思嗎,
下面是ChatGPT的理解:
完全正確!你理解得非常到位,這就是這套流程的核心含義,簡單總結一下:
你的理解流程細化版
起點:你從遠程倉庫clone了代碼,基于主分支(master或develop)新建了自己的功能分支,開始開發。
多人并行開發:別人也基于主分支做了自己的開發,提交(commit)并推送(push)到遠程,且已經有人把代碼合并(merge)回了主分支。
你的分支落后了:此時遠程主分支比你本地主分支“更新”,也就是說遠程主分支已經有了你本地功能分支沒有的代碼。
直接提交可能沖突:如果你直接把你本地的功能分支代碼提交(commit)并推送(push),然后申請合并(merge request),很可能遠程主分支與功能分支代碼有沖突,合并失敗。
提前合并解決沖突:
先切回本地主分支,拉取最新遠程主分支代碼
git checkout master && git pull origin master
切回你的功能分支
git checkout feature-xxx
把最新主分支合并進功能分支
git merge master
如果有沖突,在本地解決沖突,測試確認無誤
提交合并結果
git commit
推送功能分支
git push origin feature-xxx
申請合并請求:這時你發起合并請求,遠程主分支基本不會再出現沖突,可以順利合并。
4?git fetch的說明和理解
git checkout main #一定要有這一步
git fetch origin?
git merge origin/main
解釋:
git checkout main
切換到本地的主分支main
,確保后續操作都是基于主分支進行。
git fetch origin
從遠程倉庫origin
拉取所有分支的最新信息,包括代碼提交、標簽等,但不會自動合并到任何本地分支。
換句話說,這一步相當于把遠程倉庫的最新狀態完整下載到本地,并更新遠程跟蹤分支(如origin/main
、origin/feature-xxx
等),但不會直接修改你當前所在的本地分支。
這使得你可以安全地查看遠程變化,決定后續如何合并,避免直接自動合并帶來的風險。
git merge origin/main
將剛才fetch
下來的遠程主分支origin/main
的最新代碼,合并到當前的本地main
分支,使你的本地代碼更新到遠程最新狀態。
如果遠程和本地存在沖突,會在這里提示解決。
注意事項:但是這里要注意要提前git checkout main,如果沒有這一行只有第二第三行,那么假如原來是在本地的feature1分支,那么執行完2 3 行,相當于把遠程的main分支合并到本地的feature1里面了。
上面那三行和下面這兩行的區別
git checkout main
git pull
1.
git pull
是git fetch + git merge
的快捷命令
git pull
實際上相當于先執行git fetch
,把遠程倉庫最新內容拉下來,更新遠程追蹤分支(比如origin/main
)然后自動執行一次
git merge origin/main
,把遠程的更新合并到當前分支(這里是main
)
2. 區別在于執行的步驟是否分開
用
git fetch
+git merge
可以分兩步清晰控制:
先用
git fetch origin
拉取所有遠程分支最新信息,但不修改當前分支然后再決定是否以及什么時候合并
origin/main
到本地main
git pull
是一步完成拉取和合并,自動執行合并,不能中間檢查遠程變化
3. 什么時候用哪個更好?
如果你想對遠程變化先有個全面了解,或想手動處理合并,避免自動合并導致沖突或意外,推薦先用
bash
復制編輯
git fetch origin git merge origin/main
如果你只是想快速同步本地分支到遠程最新狀態,且信任遠程內容,
git pull
更方便快捷
5 真正開發不用Git命令,而是使用VSCode插件管理工程?
真正開發的時候不需要敲命令,直接用vscode里面的source control管理工程,進行pull,push,merge以及沖突解決等這些操作。但是前面介紹的這些命令要了解,還有整個流程要理解。