### 簡(jiǎn)介:
Git 是一個(gè)版本控制工具,除了git外還有其他版本控制工具,例如svn,主要是用來(lái)解決不同系統(tǒng)不同開(kāi)發(fā)者分工協(xié)作的問(wèn)題,git是一個(gè)分布式版本控制系統(tǒng),每次克隆都將倉(cāng)庫(kù)代碼完整鏡像下來(lái),也是對(duì)代碼倉(cāng)庫(kù)的一次備份,正因如此,git可以在本地進(jìn)行工作任務(wù)處理。相比其它版本控制工具,git以每次提交的文件快照作為處理,而不是以每一次文件的差異性作為信息保存。?
官網(wǎng):<https://git-scm.com/>
<!-- more -->?
### 常用命令以及場(chǎng)景
1. 環(huán)境設(shè)置
通過(guò)下面命令設(shè)置git confit 命令設(shè)置提交的用戶信息,通過(guò) git config --list 命令可列出配置信息
```
git config --global user.name "John Doe"
git config --global user.email johndoe@example.com
```
2. 項(xiàng)目建立
有兩種方式可以開(kāi)始項(xiàng)目,第一種是本地新建項(xiàng)目推送到遠(yuǎn)程代碼倉(cāng)庫(kù),第二種是通過(guò)遠(yuǎn)程倉(cāng)庫(kù)克隆到本地進(jìn)行工作
執(zhí)行下面命令進(jìn)行代碼倉(cāng)庫(kù)初始化,并會(huì)生成.git隱藏文件,該文件包含了git相關(guān)信息
```
git init (本地項(xiàng)目目錄下初始化)
git clone *** (遠(yuǎn)程倉(cāng)庫(kù)克隆項(xiàng)目到本地,***代表代碼倉(cāng)庫(kù)地址)
```
3. 提交工作
修改完代碼后,先將文件添加到暫存區(qū),然后檢查文件狀態(tài),最后整理好提交信息提交代碼
```
git add . (添加所有文件到暫存區(qū))
git status -s(文件狀態(tài)簡(jiǎn)覽)
git diff (查看所有文件修改)
git reset HEAD *** (撤銷(xiāo)已暫存文件修改,***代表文件路徑)
git checkout *** (撤銷(xiāo)未暫存文件修改,***代表文件路徑)
git comit -m "commit info"(提交代碼)
git commit -amend -m "commit info"(修改上一次提交信息)
```
4. 分支管理
當(dāng)項(xiàng)目有了不同特性需求后,需要多個(gè)版本時(shí),這時(shí)用到了git分支相關(guān)功能
```
git ls-remote (查看項(xiàng)目遠(yuǎn)程倉(cāng)庫(kù)分支)
git branch (查看本地分支)
git branch *** (創(chuàng)建分支,***代表分支名)
git branch -d *** (刪除本地分支,***代表分支名)
git branch -D *** (強(qiáng)制刪除本地分支,***代表分支名)
git push origin --delete branchname (刪除遠(yuǎn)程分支)
git push origin *** (推送分支到遠(yuǎn)程代碼倉(cāng)庫(kù),***代表分支名)
git checkout -b *** origin/*** (拉取遠(yuǎn)程分支代碼到本地分支,***代表分支名)
```
5. 推拉遠(yuǎn)程代碼
當(dāng)項(xiàng)目多人進(jìn)行工作時(shí),需要拉取最新代碼,以及推送自己代碼到遠(yuǎn)程代碼倉(cāng)庫(kù),remote代表遠(yuǎn)程倉(cāng)庫(kù)根目錄,branch代表分支名
```
git pull (remote)(branch)
git push (remote)(branch)
```
6. 回滾代碼
當(dāng)項(xiàng)目代碼出現(xiàn)問(wèn)題時(shí),需要返回以前版本的代碼時(shí),可通過(guò)下面命令進(jìn)行代碼回滾
```
git reset --hard *** (*** 代表回滾地方的代碼提交id)
```
7. 標(biāo)簽管理
當(dāng)代碼需要標(biāo)記,或者版本需要標(biāo)記時(shí),可在提交處打上標(biāo)簽進(jìn)行代碼管理
```
git tag (列出標(biāo)簽)
git tag *** (新建輕量標(biāo)簽,***代表標(biāo)簽名)
git tag -a *** -m "tag info" (新建附注標(biāo)簽)
git tag -a tagname commitId (補(bǔ)簽,tagname表示標(biāo)簽名,commitId表示補(bǔ)簽提交的id)
git tag show ***(查看標(biāo)簽信息,***代表標(biāo)簽名)
git push origin *** (推送標(biāo)簽到遠(yuǎn)程倉(cāng)庫(kù)共,***代表標(biāo)簽名享)
git push origin -tags (推送所有標(biāo)簽)
git checkout -b branchname tagname (檢出標(biāo)簽到新建分支,branchname表示分支名,tagname表示標(biāo)簽名)
```
8. 分支合并
開(kāi)發(fā)過(guò)程中,會(huì)因?yàn)轫?xiàng)目特性,需求,以及bug等原因需要開(kāi)多個(gè)分支進(jìn)行編碼處理,當(dāng)處理完之后則需要合并到穩(wěn)定分支或線上分支上,這里有兩種方式,一是合并分支,二是變基分支。
```
git merge branchname (合并分支會(huì)將兩個(gè)分支的末端提交和共同的祖先提交進(jìn)行三方合并形成新的分支)
```
變基分支則需要多個(gè)步驟,假設(shè)主分支為master, 被合并的分支為 branch1,先切換到branch1分支進(jìn)行變基,然后再切換到主分支進(jìn)行快進(jìn)合并,變基分支和合并分支不同的特點(diǎn)在于它是相當(dāng)于在主分支上重新建立分支上的修改提交,在log上顯的更加清晰一些,要注意的是,避免在協(xié)作過(guò)程中將已經(jīng)推送的提交進(jìn)行變基操作。
```
git checkout branch1
git rebase master
git checkout master
git merge branch1
```