工具:Git合作開(kāi)發(fā)的藝術(shù)

Git工作流程

一般工作流程如下:

  • 克隆 Git 資源作為工作目錄。
  • 在克隆的資源上添加或修改文件。
  • 如果其他人修改了,你可以更新資源。
  • 在提交前查看修改。
  • 提交修改。
  • 在修改完成后,如果發(fā)現(xiàn)錯(cuò)誤,可以撤回提交并再次修改并提交。


    git工作流.png


Git 工作區(qū)、暫存區(qū)和版本庫(kù)

  • 工作區(qū):就是你在電腦里能看到的目錄。

  • 暫存區(qū):一般存放在 ".git目錄下"下的index文件(.git/index)中,所以我們把暫存區(qū)有時(shí)也叫作索引(index)。

  • 版本庫(kù):工作區(qū)有一個(gè)隱藏目錄.git,這個(gè)不算工作區(qū),而是Git的版本庫(kù)。


    git倉(cāng)庫(kù).png
    • 執(zhí)行 "git add" 命令時(shí),暫存區(qū)的目錄樹(shù)被更新,同時(shí)工作區(qū)修改(或新增)的文件內(nèi)容被寫入到對(duì)象庫(kù)中的一個(gè)新的對(duì)象中,而該對(duì)象的ID被記錄在暫存區(qū)的文件索引中。
    • 執(zhí)行提交操作(git commit)時(shí),暫存區(qū)的目錄樹(shù)寫到版本庫(kù)(對(duì)象庫(kù))中,master 分支會(huì)做相應(yīng)的更新。
    • 執(zhí)行 "git reset HEAD" 命令時(shí),暫存區(qū)的目錄樹(shù)會(huì)被重寫,被 master 分支指向的目錄樹(shù)所替換,但是工作區(qū)不受影響。
    • 執(zhí)行 "git rm --cached <file>" 命令時(shí),會(huì)直接從暫存區(qū)刪除文件,工作區(qū)則不做出改變。
    • 執(zhí)行 "git checkout ." 或者 "git checkout -- <file>" 命令時(shí),會(huì)用暫存區(qū)全部或指定的文件替換工作區(qū)的文件。這個(gè)操作很危險(xiǎn),會(huì)清除工作區(qū)中未添加到暫存區(qū)的改動(dòng)。
    • 執(zhí)行 "git checkout HEAD ." 或者 "git checkout HEAD <file>" 命令時(shí),會(huì)用 HEAD 指向的 master 分支中的全部或者部分文件替換暫存區(qū)和以及工作區(qū)中的文件。這個(gè)命令也是極具危險(xiǎn)性的.


Git命令

Git官方文檔
Git使用指南
git rebase 和 git merge

  1. 創(chuàng)建倉(cāng)庫(kù):git init
  2. 克隆遠(yuǎn)程代碼:git clone -b <分支名> <代碼庫(kù)地址>
  3. 添加到暫存區(qū):git add <fileName> 或者git add -A(add全部修改)
  4. 提交到本地庫(kù):git commit -m "tag"
  5. 提交到遠(yuǎn)程庫(kù):git push origin <本地分支>:<遠(yuǎn)程分支>
  6. 連接遠(yuǎn)程服務(wù)器:git remote add origin <遠(yuǎn)程服務(wù)器地址>
  7. 分支管理
    • 新建分支:git branch <分支名> 或者 git checkout -b <分支名>
    • 切換分支:git checkout <分支名>
    • 刪除本地分支:git branch -d(-D) <分支名>(-D:強(qiáng)制刪除)
    • 刪除遠(yuǎn)程分支:git push origin --delete <分支名> 或者 git push origin :<分支名>(推送一個(gè)空分支)
    • 查看本地分支:git branch
    • 查看所有分支:git branch -a
    • 查看本地分支和遠(yuǎn)程分支的關(guān)聯(lián)情況:git branch -vv
    • 合并分支:git merge <分支名> 或者 git rebase <分支名>
  8. 獲取最新改動(dòng):git pull 或者 git fetch 或者 git pull <遠(yuǎn)程庫(kù)名> <遠(yuǎn)程分支名>:<本地分支名>
  9. 刪除修改:
    • 未add到暫存區(qū):git checkout -- <fileName> 或者 git checkout .
    • 已a(bǔ)dd到暫存區(qū):git reset HEAD <fileName> 然后再執(zhí)行未add的暫存區(qū)的步驟
    • 已commit到本地庫(kù):git reset --hard <commit_id> 或者 git reset --hard HEAD^(有幾個(gè)就回退幾個(gè)版本)
    • git revert <commit_id>

git revert 是生成一個(gè)新的提交來(lái)撤銷某次提交,此次提交之前的commit都會(huì)被保留
git reset 是回到某次提交,提交及之前的commit都會(huì)被保留,但是此次之后的修改都會(huì)被退回到暫存區(qū)

  1. stash
    • 暫存本地修改:git stash
    • 查看暫存:git stash list
    • 恢復(fù)暫存:git stash apply <name> 或者 git stash pop(恢復(fù)最近一次暫存)
    • 清除暫存:git stash clear
  2. tag
    • 打標(biāo)簽:git tag -a <tagName> -m "注釋"
    • 查看標(biāo)簽:git tag 或者 git tag -l
    • 刪除標(biāo)簽:git tag -d <tagName>
    • 提交標(biāo)簽到遠(yuǎn)程庫(kù):git push origin <tagName> 或者 git push origin --tags
    • 刪除遠(yuǎn)程標(biāo)簽:git push origin :<遠(yuǎn)程tagName>
    • 切換到某個(gè)標(biāo)簽代碼:git checkout -b <分支名> <tagName>
  3. cherry-pick(特定版的merge,只merge指定的commit)
    • 單個(gè)commit:git cherry-pick commit_id
    • 多個(gè)commit:git cherry-pick commit_id1..commit_id100(中間兩個(gè)點(diǎn))


項(xiàng)目初始化

  • 創(chuàng)建項(xiàng)目

    1. mkdir gitYanshi -- 創(chuàng)建本地文件夾
    2. cd gitYanshi -- 進(jìn)入到本地文件夾
    3. git init -- 初始化本地git庫(kù)
    4. touch README.md -- 添加本地文件
    5. git add README.md -- add到緩存區(qū)(git add -A add全部修改)
    6. git commit -m "first commit" -- 提交到本地git庫(kù)
    7. git remote add origin https://gitee.com/FeiKing/gitYanshi.git -- 關(guān)聯(lián)遠(yuǎn)程git庫(kù)地址
    8. git push -u origin master -- 提交到遠(yuǎn)程分支


      創(chuàng)建項(xiàng)目.png
  • 添加已有項(xiàng)目

    1. cd existing_git_repo
    2. git remote add origin https://gitee.com/FeiKing/gitYanshi.git
    3. git push -u origin master


      已有項(xiàng)目關(guān)聯(lián)遠(yuǎn)程倉(cāng)庫(kù).png
  • 克隆已有項(xiàng)目
    git clone -b master https://gitee.com/FeiKing/gitYanshi.git


單分支開(kāi)發(fā)

1.git fetch + git rebase --------- (版本開(kāi)發(fā)標(biāo)準(zhǔn))

fetch+rebase.png

分支模型:master --> origin/master

2.git pull + git rebase
pull+rebase.png

分支模型:
master(本地) --> origin/master(遠(yuǎn)程)
dev(本地開(kāi)發(fā))


單人單分支開(kāi)發(fā)

單人單分支工作流.png

注:git pull可以在修改前也可以在修改后,但至少保證有一次這樣的操作。(單人多機(jī)器開(kāi)發(fā))


多分支開(kāi)發(fā) ------ 重點(diǎn)理解

  • 模型


    多分支模型.png
  1. 上面部分為遠(yuǎn)程分支,下面部分為本地分支
  2. master為基準(zhǔn)分支,dev1、dev2均為從master上checkout出來(lái)的功能分支
  3. 所有的git提交均為縱向的,不允許交叉提交
  4. 分支合并均在本地merge后再提交到遠(yuǎn)程分支,不允許直接合并遠(yuǎn)程分支
  5. 縱向“變基”使用git rebase,橫向合并分支使用git merge,切記!切記!
多人開(kāi)發(fā).png
  • 新建功能分支并推送到遠(yuǎn)程Git庫(kù)保存
    1. 新建分支并關(guān)聯(lián)遠(yuǎn)程分支


      新建分支并關(guān)聯(lián)遠(yuǎn)程倉(cāng)庫(kù)分支.png
  1. temp_dev:本地新建開(kāi)發(fā)分支
  2. temp:遠(yuǎn)程新建功能分支
  3. 提交修改后或者修改前一定要記得git pull,養(yǎng)成這個(gè)良好的習(xí)慣能有效的減少?zèng)_突
  1. 僅新建分支不建立關(guān)聯(lián)


    新建分支不關(guān)聯(lián)遠(yuǎn)程分支.png
  • 拉取本地不存在的遠(yuǎn)程分支


    拉取遠(yuǎn)程指定分支.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請(qǐng)通過(guò)簡(jiǎn)信或評(píng)論聯(lián)系作者。

相關(guān)閱讀更多精彩內(nèi)容

  • Git 基礎(chǔ) 基本原理 客戶端并不是只提取最新版本的文件快照,而是把代碼倉(cāng)庫(kù)完整的鏡像下來(lái)。這樣一來(lái),任何一處協(xié)同...
    __silhouette閱讀 16,196評(píng)論 5 147
  • Git 命令行學(xué)習(xí)筆記 Git 基礎(chǔ) 基本原理 客戶端并不是只提取最新版本的文件快照,而是把代碼倉(cāng)庫(kù)完整的鏡像下來(lái)...
    sunnyghx閱讀 4,151評(píng)論 0 11
  • Git常用語(yǔ)法 [TOC] Git簡(jiǎn)介 描述 ? Git(讀音為/g?t/。)是一個(gè)開(kāi)源的分布式版本控制系統(tǒng),...
    君惜丶閱讀 3,933評(píng)論 0 13
  • 晚風(fēng)帶著特有的清涼拂過(guò)窗前,夏蟲(chóng)吱吱的叫著,我的心格外平靜。 一杯茶,一個(gè)蒲團(tuán),一個(gè)孤獨(dú)的靈魂,這就是我的夜晚。 ...
    一笑婆娑醉顏佗閱讀 279評(píng)論 0 0
  • 服務(wù)員端上一盤安格斯牛排,我的腸胃里頓時(shí)翻江倒海,這已經(jīng)是我出差來(lái)北美后的第八頓牛排了!我身上的每一個(gè)細(xì)胞都在渴望...
    兮兮的夏天閱讀 324評(píng)論 2 7

友情鏈接更多精彩內(nèi)容