### 簡介:
Git 是一個版本控制工具适瓦,除了git外還有其他版本控制工具竿开,例如svn,主要是用來解決不同系統(tǒng)不同開發(fā)者分工協(xié)作的問題,git是一個分布式版本控制系統(tǒng)玻熙,每次克隆都將倉庫代碼完整鏡像下來否彩,也是對代碼倉庫的一次備份,正因如此揭芍,git可以在本地進行工作任務處理胳搞。相比其它版本控制工具,git以每次提交的文件快照作為處理称杨,而不是以每一次文件的差異性作為信息保存。?
官網(wǎng):<https://git-scm.com/>
<!-- more -->?
### 常用命令以及場景
1. 環(huán)境設置
通過下面命令設置git confit 命令設置提交的用戶信息筷转,通過 git config --list 命令可列出配置信息
```
git config --global user.name "John Doe"
git config --global user.email johndoe@example.com
```
2. 項目建立
有兩種方式可以開始項目姑原,第一種是本地新建項目推送到遠程代碼倉庫,第二種是通過遠程倉庫克隆到本地進行工作
執(zhí)行下面命令進行代碼倉庫初始化,并會生成.git隱藏文件,該文件包含了git相關信息
```
git init (本地項目目錄下初始化)
git clone *** (遠程倉庫克隆項目到本地呜舒,***代表代碼倉庫地址)
```
3. 提交工作
修改完代碼后锭汛,先將文件添加到暫存區(qū),然后檢查文件狀態(tài)袭蝗,最后整理好提交信息提交代碼
```
git add . (添加所有文件到暫存區(qū))
git status -s(文件狀態(tài)簡覽)
git diff (查看所有文件修改)
git reset HEAD *** (撤銷已暫存文件修改唤殴,***代表文件路徑)
git checkout *** (撤銷未暫存文件修改,***代表文件路徑)
git comit -m "commit info"(提交代碼)
git commit -amend -m "commit info"(修改上一次提交信息)
```
4. 分支管理
當項目有了不同特性需求后到腥,需要多個版本時朵逝,這時用到了git分支相關功能
```
git ls-remote (查看項目遠程倉庫分支)
git branch (查看本地分支)
git branch *** (創(chuàng)建分支,***代表分支名)
git branch -d *** (刪除本地分支乡范,***代表分支名)
git branch -D *** (強制刪除本地分支配名,***代表分支名)
git push origin --delete branchname (刪除遠程分支)
git push origin *** (推送分支到遠程代碼倉庫,***代表分支名)
git checkout -b *** origin/*** (拉取遠程分支代碼到本地分支晋辆,***代表分支名)
```
5. 推拉遠程代碼
當項目多人進行工作時渠脉,需要拉取最新代碼,以及推送自己代碼到遠程代碼倉庫,remote代表遠程倉庫根目錄瓶佳,branch代表分支名
```
git pull (remote)(branch)
git push (remote)(branch)
```
6. 回滾代碼
當項目代碼出現(xiàn)問題時芋膘,需要返回以前版本的代碼時,可通過下面命令進行代碼回滾
```
git reset --hard *** (*** 代表回滾地方的代碼提交id)
```
7. 標簽管理
當代碼需要標記霸饲,或者版本需要標記時为朋,可在提交處打上標簽進行代碼管理
```
git tag (列出標簽)
git tag *** (新建輕量標簽,***代表標簽名)
git tag -a *** -m "tag info" (新建附注標簽)
git tag -a tagname commitId (補簽贴彼,tagname表示標簽名潜腻,commitId表示補簽提交的id)
git tag show ***(查看標簽信息,***代表標簽名)
git push origin *** (推送標簽到遠程倉庫共器仗,***代表標簽名享)
git push origin -tags (推送所有標簽)
git checkout -b branchname tagname (檢出標簽到新建分支融涣,branchname表示分支名童番,tagname表示標簽名)
```
8. 分支合并
開發(fā)過程中,會因為項目特性威鹿,需求剃斧,以及bug等原因需要開多個分支進行編碼處理,當處理完之后則需要合并到穩(wěn)定分支或線上分支上忽你,這里有兩種方式幼东,一是合并分支,二是變基分支科雳。
```
git merge branchname (合并分支會將兩個分支的末端提交和共同的祖先提交進行三方合并形成新的分支)
```
變基分支則需要多個步驟根蟹,假設主分支為master, 被合并的分支為 branch1,先切換到branch1分支進行變基,然后再切換到主分支進行快進合并,變基分支和合并分支不同的特點在于它是相當于在主分支上重新建立分支上的修改提交糟秘,在log上顯的更加清晰一些简逮,要注意的是,避免在協(xié)作過程中將已經(jīng)推送的提交進行變基操作尿赚。
```
git checkout branch1
git rebase master
git checkout master
git merge branch1
```