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
- 創(chuàng)建倉(cāng)庫(kù):git init
- 克隆遠(yuǎn)程代碼:git clone -b <分支名> <代碼庫(kù)地址>
- 添加到暫存區(qū):git add <fileName> 或者git add -A(add全部修改)
- 提交到本地庫(kù):git commit -m "tag"
- 提交到遠(yuǎn)程庫(kù):git push origin <本地分支>:<遠(yuǎn)程分支>
- 連接遠(yuǎn)程服務(wù)器:git remote add origin <遠(yuǎn)程服務(wù)器地址>
- 分支管理
- 新建分支: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 <分支名>
- 獲取最新改動(dòng):git pull 或者 git fetch 或者 git pull <遠(yuǎn)程庫(kù)名> <遠(yuǎn)程分支名>:<本地分支名>
- 刪除修改:
- 未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ū)
- stash
- 暫存本地修改:git stash
- 查看暫存:git stash list
- 恢復(fù)暫存:git stash apply <name> 或者 git stash pop(恢復(fù)最近一次暫存)
- 清除暫存:git stash clear
- 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>
- 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)目
- mkdir gitYanshi -- 創(chuàng)建本地文件夾
- cd gitYanshi -- 進(jìn)入到本地文件夾
- git init -- 初始化本地git庫(kù)
- touch README.md -- 添加本地文件
- git add README.md -- add到緩存區(qū)(git add -A add全部修改)
- git commit -m "first commit" -- 提交到本地git庫(kù)
- git remote add origin https://gitee.com/FeiKing/gitYanshi.git -- 關(guān)聯(lián)遠(yuǎn)程git庫(kù)地址
-
git push -u origin master -- 提交到遠(yuǎn)程分支
創(chuàng)建項(xiàng)目.png
-
添加已有項(xiàng)目
- cd existing_git_repo
- git remote add origin https://gitee.com/FeiKing/gitYanshi.git
-
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))

分支模型:master --> origin/master
2.git pull + git rebase

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

注:git pull可以在修改前也可以在修改后,但至少保證有一次這樣的操作。(單人多機(jī)器開(kāi)發(fā))
多分支開(kāi)發(fā) ------ 重點(diǎn)理解
-
模型
多分支模型.png
- 上面部分為遠(yuǎn)程分支,下面部分為本地分支
- master為基準(zhǔn)分支,dev1、dev2均為從master上checkout出來(lái)的功能分支
- 所有的git提交均為縱向的,不允許交叉提交
- 分支合并均在本地merge后再提交到遠(yuǎn)程分支,不允許直接合并遠(yuǎn)程分支
- 縱向“變基”使用git rebase,橫向合并分支使用git merge,切記!切記!

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







