目到倉庫)
Git 常用命令與實(shí)戰(zhàn)操作指南一、常用 Git 命令速查命令說明示例git clone repository克隆遠(yuǎn)程倉庫到本地git clone https://github.com/username/repo.gitgit add file將文件添加到暫存區(qū)git add index.htmlgit commit -m message提交暫存區(qū)內(nèi)容到本地倉庫git commit -m Added index.htmlgit push推送本地提交到遠(yuǎn)程倉庫git push origin mastergit pull拉取遠(yuǎn)程更新并合并到當(dāng)前分支git pull origin mastergit branch branch-name創(chuàng)建新分支git branch feature-branchgit checkout branch-name切換分支git checkout feature-branchgit merge branch-name合并指定分支到當(dāng)前分支git merge feature-branchgit status查看工作區(qū)和暫存區(qū)狀態(tài)git statusgit log查看提交歷史git loggit stash暫存當(dāng)前未提交的修改git stashgit remote add origin url關(guān)聯(lián)本地倉庫與遠(yuǎn)程倉庫git remote add origin https://github.com/username/repo.git 在終端輸入git --help可查看更完整的命令幫助。二、終端基礎(chǔ)操作目錄與文件1. 切換盤符WindowsD: # 切換到 D 盤 cd /d D:\Projects # 切換到 D 盤的 Projects 目錄2. 切換目錄macOS / Linuxcd/# 切換到根目錄cd/Volumes/External# 切換到掛載磁盤3. 列出目錄文件WindowsdirmacOS / Linuxls4. 樹狀圖顯示目錄結(jié)構(gòu)Windows需安裝 treetree/tree /fmacOS / Linux自帶tree/tree -F5. 返回上級(jí)目錄cd..cd\# Windows 返回根目錄三、完整實(shí)戰(zhàn)示例從零開始推送 C# 項(xiàng)目到 Gitee步驟 1初始化本地倉庫mkdircad-secondary-development-toolcdcad-secondary-development-toolgitinit步驟 2添加文件并提交# 添加所有 .cs 文件gitadd*.cs# 或添加全部文件gitadd.gitcommit-m首次提交 C# 項(xiàng)目代碼步驟 3關(guān)聯(lián)遠(yuǎn)程倉庫gitremoteaddorigin https://gitee.com/yourname/cad-secondary-development-tool.git步驟 4拉取遠(yuǎn)程更新若遠(yuǎn)程非空gitpull--rebaseorigin master步驟 5推送本地代碼gitpush-uorigin master? 第一次推送使用-u建立上游關(guān)聯(lián)后續(xù)可直接使用git push。四、常用操作完整示例1. 拉取遠(yuǎn)程最新代碼gitpull origin master等價(jià)于git fetchgit merge推薦日常使用前先執(zhí)行。2. 退回提交三種常用方式 回退到上一個(gè)提交保留修改gitreset--softHEAD~1撤銷 commit但保留暫存區(qū)和工作區(qū)修改 回退到上一個(gè)提交撤銷 commit 和 addgitreset--mixedHEAD~1# 默認(rèn)模式撤銷 commit 和 add保留工作區(qū)修改 完全回退到指定提交丟棄所有修改gitreset--hardcommit-id徹底回到某個(gè)提交慎用會(huì)丟失后續(xù)修改 回退到遠(yuǎn)程倉庫的某個(gè)版本gitreset--hardorigin/master3. 修改最后一次提交內(nèi)容 修改提交信息gitcommit--amend-m新的提交信息 漏掉了文件補(bǔ)充到上一次提交gitadd忘記的文件.csgitcommit--amend--no-edit# 不修改信息只補(bǔ)充文件 修改更早的提交交互式變基gitrebase-iHEAD~3# 修改最近 3 次提交在打開的編輯器中將pick改為edit保存后修改內(nèi)容然后執(zhí)行g(shù)itadd.gitcommit--amendgitrebase--continue4. 撤銷已推送的提交謹(jǐn)慎操作 方式一回退后強(qiáng)制推送?? 團(tuán)隊(duì)協(xié)作慎用gitreset--hardHEAD~1gitpush-forigin master 方式二使用 revert 保留歷史推薦gitrevert HEAD# 撤銷最近一次提交并生成一個(gè)新的反向提交gitpush origin master五、常見報(bào)錯(cuò)及解決方案? 錯(cuò)誤 1fatal: unable to auto-detect email address原因未配置 Git 用戶信息。解決gitconfig--globaluser.name你的名字gitconfig--globaluser.email你的郵箱example.com? 錯(cuò)誤 2! [rejected] master - master (fetch first)原因遠(yuǎn)程有本地未獲取的新提交。解決gitpull origin master# 若有沖突解決后 add commitgitpush origin master? 錯(cuò)誤 3! [rejected] master - master (non-fast-forward)原因本地與遠(yuǎn)程提交歷史不一致如曾強(qiáng)制推送或變基。解決合并歷史gitpull origin master --allow-unrelated-histories# 解決沖突后提交gitpush origin master?? 也可強(qiáng)制推送不推薦gitpush-forigin master? 錯(cuò)誤 4fatal: remote origin already exists原因已添加過遠(yuǎn)程倉庫。解決gitremote set-url origin https://新地址.git# 或刪除后重新添加gitremote remove origingitremoteaddorigin https://新地址.git? 錯(cuò)誤 5error: failed to push some refs解決步驟先git pull --rebase origin master解決沖突如有g(shù)it add .git commitgit push origin master六、實(shí)用配置與查看設(shè)置/查看用戶名和郵箱gitconfig--globaluser.name你的名字gitconfig--globaluser.email你的郵箱gitconfig user.name# 查看當(dāng)前用戶名gitconfig user.email# 查看當(dāng)前郵箱實(shí)用配置與查看# 設(shè)置用戶名和郵箱gitconfig--globaluser.name你的名字gitconfig--globaluser.email你的郵箱# 查看當(dāng)前配置gitconfig user.namegitconfig user.email# 查看 Git 全局配置gitconfig--global--list分支管理完整指南1. 分支基礎(chǔ)命令命令說明git branch查看本地所有分支當(dāng)前分支前有*標(biāo)記git branch -r查看遠(yuǎn)程分支git branch -a查看本地和遠(yuǎn)程所有分支git branch branch-name創(chuàng)建新分支git checkout branch-name切換到指定分支git switch branch-name切換分支Git 2.23 推薦git checkout -b branch-name創(chuàng)建并切換到新分支git switch -c branch-name創(chuàng)建并切換Git 2.23git merge branch-name將指定分支合并到當(dāng)前分支git branch -d branch-name刪除本地分支已合并git branch -D branch-name強(qiáng)制刪除本地分支未合并git push origin --delete branch-name刪除遠(yuǎn)程分支git branch -m old-name new-name重命名分支2. 分支管理實(shí)戰(zhàn)場(chǎng)景 場(chǎng)景一開發(fā)新功能標(biāo)準(zhǔn)流程# 1. 從主分支創(chuàng)建功能分支gitcheckout mastergitpull origin master# 確保主分支最新gitcheckout-bfeature/login# 2. 在功能分支上開發(fā)并提交gitadd.gitcommit-m完成登錄功能開發(fā)# 3. 推送功能分支到遠(yuǎn)程便于協(xié)作或備份gitpush-uorigin feature/login# 4. 合并回主分支gitcheckout mastergitpull origin master# 拉取最新主分支gitmerge feature/login# 合并功能分支# 5. 推送更新后的主分支gitpush origin master# 6. 刪除已合并的功能分支gitbranch-dfeature/logingitpush origin--deletefeature/login 場(chǎng)景二緊急修復(fù) Bug熱修復(fù)分支# 1. 從主分支創(chuàng)建熱修復(fù)分支gitcheckout mastergitcheckout-bhotfix/critical-bug# 2. 修復(fù) Bug 并提交gitadd.gitcommit-m修復(fù)登錄驗(yàn)證漏洞# 3. 合并到主分支gitcheckout mastergitmerge hotfix/critical-buggitpush origin master# 4. 同步到開發(fā)分支如果有g(shù)itcheckout developgitmerge hotfix/critical-bug# 5. 刪除熱修復(fù)分支gitbranch-dhotfix/critical-bug 場(chǎng)景三分支沖突解決# 合并時(shí)出現(xiàn)沖突gitmerge feature/branch-a# 報(bào)錯(cuò)Automatic merge failed; fix conflicts and then commit the result.# 解決步驟gitstatus# 查看沖突文件# 手動(dòng)編輯沖突文件刪除 , , 標(biāo)記gitadd.# 標(biāo)記沖突已解決gitcommit-m解決合并沖突gitpush origin master 場(chǎng)景四分支比較與查看# 查看兩個(gè)分支的差異gitdiffmaster..feature/login# 查看分支提交歷史圖形化gitlog--graph--oneline--all# 查看哪些分支已合并到當(dāng)前分支gitbranch--merged# 查看哪些分支未合并到當(dāng)前分支gitbranch --no-merged3. 分支管理常見報(bào)錯(cuò)? 錯(cuò)誤 1error: The branch xxx is not fully merged原因分支有未合并的提交使用-d刪除會(huì)被阻止。解決# 確認(rèn)是否需要合并gitbranch --no-merged# 若確定要丟棄該分支的修改強(qiáng)制刪除gitbranch-Dxxx? 錯(cuò)誤 2fatal: Cannot delete branch xxx checked out at remote原因嘗試刪除遠(yuǎn)程分支但該分支正在被某個(gè)遠(yuǎn)程用戶使用。解決先切換遠(yuǎn)程倉庫的默認(rèn)分支或確認(rèn)無人使用后再刪除。? 錯(cuò)誤 3合并時(shí)出現(xiàn)merge conflict解決手動(dòng)編輯沖突文件 →git add→git commit。標(biāo)簽管理完整指南1. 標(biāo)簽基礎(chǔ)命令命令說明git tag查看所有標(biāo)簽git tag -l pattern按模式搜索標(biāo)簽如git tag -l v1.*git tag tag-name創(chuàng)建輕量標(biāo)簽git tag -a tag-name -m message創(chuàng)建附注標(biāo)簽推薦git show tag-name查看標(biāo)簽詳細(xì)信息git push origin tag-name推送單個(gè)標(biāo)簽到遠(yuǎn)程git push origin --tags推送所有本地標(biāo)簽到遠(yuǎn)程git tag -d tag-name刪除本地標(biāo)簽git push origin --delete tag-name刪除遠(yuǎn)程標(biāo)簽git checkout tag-name切換到標(biāo)簽對(duì)應(yīng)的代碼狀態(tài)2. 標(biāo)簽管理實(shí)戰(zhàn)場(chǎng)景 場(chǎng)景一發(fā)布版本時(shí)打標(biāo)簽# 1. 確保在主分支上gitcheckout mastergitpull origin master# 2. 打附注標(biāo)簽推薦gittag-av1.0.0-m發(fā)布 1.0.0 正式版# 3. 查看標(biāo)簽gittag# 4. 推送標(biāo)簽到遠(yuǎn)程gitpush origin v1.0.0# 或推送所有標(biāo)簽gitpush origin--tags 場(chǎng)景二為歷史提交打標(biāo)簽# 查看提交歷史找到目標(biāo) commit-idgitlog--oneline# 為某個(gè)歷史提交打標(biāo)簽gittag-av0.9.0commit-id-mBeta 版本 場(chǎng)景三基于標(biāo)簽創(chuàng)建分支修復(fù)舊版本 Bug# 1. 基于標(biāo)簽創(chuàng)建熱修復(fù)分支gitcheckout-bhotfix/v1.0.0-fix v1.0.0# 2. 修復(fù) Bug 并提交gitadd.gitcommit-m修復(fù) v1.0.0 版本問題# 3. 打新標(biāo)簽gittag-av1.0.1-m修復(fù)補(bǔ)丁版本gitpush origin v1.0.1 場(chǎng)景四刪除標(biāo)簽# 刪除本地標(biāo)簽gittag-dv1.0.0# 刪除遠(yuǎn)程標(biāo)簽gitpush origin--deletev1.0.0# 或使用舊語法gitpush origin :refs/tags/v1.0.03. 標(biāo)簽管理常見報(bào)錯(cuò)? 錯(cuò)誤 1fatal: tag v1.0.0 already exists原因本地已存在同名標(biāo)簽。解決# 刪除本地標(biāo)簽后重新創(chuàng)建gittag-dv1.0.0gittag-av1.0.0-m新的信息gitpush origin v1.0.0--force? 錯(cuò)誤 2推送標(biāo)簽時(shí)報(bào)failed to push some refs原因遠(yuǎn)程已有同名標(biāo)簽。解決# 先刪除遠(yuǎn)程標(biāo)簽gitpush origin--deletev1.0.0# 再推送本地標(biāo)簽gitpush origin v1.0.0七、總結(jié)場(chǎng)景推薦命令首次推送項(xiàng)目git init→add .→commit→remote add→push -u日常同步代碼git pull→ 修改 →add→commit→push撤銷本地提交保留修改git reset --soft HEAD~1撤銷本地提交丟棄修改git reset --hard HEAD~1修改最后一次提交git commit --amend撤銷已推送提交安全git revert HEAD強(qiáng)制覆蓋遠(yuǎn)程慎用git push -f操作場(chǎng)景推薦命令創(chuàng)建并切換新分支git checkout -b feature/xxx合并分支git merge feature/xxx刪除本地分支git branch -d feature/xxx刪除遠(yuǎn)程分支git push origin --delete feature/xxx查看分支圖git log --graph --oneline --all打附注標(biāo)簽git tag -a v1.0.0 -m 發(fā)布說明推送標(biāo)簽git push origin v1.0.0刪除遠(yuǎn)程標(biāo)簽git push origin --delete v1.0.0撤銷本地提交保留修改git reset --soft HEAD~1撤銷已推送提交安全git revert HEAD強(qiáng)制覆蓋遠(yuǎn)程慎用git push -f origin master歡迎一起學(xué)習(xí)交流 我的 Gitee 主頁