原文鏈接:Vcs-Git
本文總結(jié)版本控制工具git在日常開發(fā)工作常用到的一些命令屡萤,以及一些常用的場景應(yīng)用突勇,比如分支管理递瑰,遠(yuǎn)程管理宝穗,合并沖突處理等掐场。后續(xù)持續(xù)更新中。
常用命令
下面的圖片很清晰的說明來一些命令和各個區(qū)域的關(guān)系
git-command.png
常用
git remote add origin git@github.com:yeszao/dofiler.git # 配置遠(yuǎn)程git版本庫
git pull origin master # 下載代碼及快速合并
git push origin master # 上傳代碼及快速合并
git fetch origin # 從遠(yuǎn)程庫獲取代碼
git branch # 顯示所有分支
git checkout master # 切換到master分支
git checkout -b dev # 創(chuàng)建并切換到dev分支
git commit -m "first version" # 提交
git status # 查看狀態(tài)
git log # 查看提交歷史
git config --global core.editor vim # 設(shè)置默認(rèn)編輯器為vim(git默認(rèn)用nano)
git config core.ignorecase false # 設(shè)置大小寫敏感
git config --global user.name "YOUR NAME" # 設(shè)置用戶名
git config --global user.email "YOUR EMAIL ADDRESS" # 設(shè)置郵箱
創(chuàng)建版本庫
git clone <url> # 克隆遠(yuǎn)程版本庫
git init # 初始化本地版本庫
修改和提交
git status # 查看狀態(tài)
git diff # 查看變更內(nèi)容
git add . # 跟蹤所有改動過的文件
git add <file> # 跟蹤指定的文件
git mv <old> <new> # 文件改名
git rm <file> # 刪除文件
git rm --cached <file> # 停止跟蹤文件但不刪除
git commit -m “commit message” # 提交所有更新過的文件
git commit --amend # 修改最后一次提交
查看提交歷史
git log # 查看提交歷史
git log -p <file> # 查看指定文件的提交歷史
git blame <file> # 以列表方式查看指定文件的提交歷史
撤消
git reset --hard HEAD # 撤消工作目錄中所有未提交文件的修改內(nèi)容
git reset --hard <version> # 撤銷到某個特定版本
git checkout HEAD <file> # 撤消指定的未提交文件的修改內(nèi)容
git checkout -- <file> # 同上一個命令
git revert <commit> # 撤消指定的提交
分支與標(biāo)簽
git branch # 顯示所有本地分支
git checkout <branch/tag> # 切換到指定分支或標(biāo)簽
git branch <new-branch> # 創(chuàng)建新分支
git branch -d <branch> # 刪除本地分支
git tag # 列出所有本地標(biāo)簽
git tag <tagname> # 基于最新提交創(chuàng)建標(biāo)簽
git tag -a "v1.0" -m "一些說明" # -a指定標(biāo)簽名稱,-m指定標(biāo)簽說明
git tag -d <tagname> # 刪除標(biāo)簽
git checkout dev # 合并特定的commit到dev分支上
git cherry-pick 62ecb3
合并與衍合
git merge <branch> # 合并指定分支到當(dāng)前分支
git merge --abort # 取消當(dāng)前合并专执,重建合并前狀態(tài)
git merge dev -Xtheirs # 以合并dev分支到當(dāng)前分支,有沖突則以dev分支為準(zhǔn)
git rebase <branch> # 衍合指定分支到當(dāng)前分支
遠(yuǎn)程操作
git remote -v # 查看遠(yuǎn)程版本庫信息
git remote show <remote> # 查看指定遠(yuǎn)程版本庫信息
git remote add <remote> <url> # 添加遠(yuǎn)程版本庫
git remote remove <remote> # 刪除指定的遠(yuǎn)程版本庫
git fetch <remote> # 從遠(yuǎn)程庫獲取代碼
git pull <remote> <branch> # 下載代碼及快速合并
git push <remote> <branch> # 上傳代碼及快速合并
git push <remote> :<branch/tag-name> # 刪除遠(yuǎn)程分支或標(biāo)簽
git push --tags # 上傳所有標(biāo)簽
Git 分支管理
Git Flow流程管理,參見如下圖
git-flow.png
主分支master
開發(fā)分支develop
git checkout -b develop master
# 切換到Master分支
git checkout master
# 對Develop分支進(jìn)行合并,使用--no-ff參數(shù)后郁油,會執(zhí)行正常合并本股,
# 在Master分支上生成一個新節(jié)點(diǎn)。
# 為了保證版本演進(jìn)的清晰桐腌,我們希望采用這種做法拄显。
git merge --no-ff develop
臨時分支
- 功能(feature)分支,為了開發(fā)某種特定功能,從Develop分支上面分出來的案站。開發(fā)完成后躬审,要再并入Develop。
# 創(chuàng)建一個功能分支
git checkout -b feature-x develop
# 開發(fā)完成后蟆盐,將功能分支合并到develop分支:
git checkout develop
git merge --no-ff feature-x
刪除feature分支
git branch -d feature-x
- 預(yù)發(fā)布(release)分支,發(fā)布正式版本之前(即合并到Master分支之前)承边,我們可能需要有一個預(yù)發(fā)布的版本進(jìn)行測試。預(yù)發(fā)布分支是從Develop分支上面分出來的石挂,預(yù)發(fā)布結(jié)束以后博助,必須合并進(jìn)Develop和Master分支。它的命名痹愚,可以采用release-*的形式富岳。
# 創(chuàng)建一個預(yù)發(fā)布分支
git checkout -b release-1.2 develop
# 確認(rèn)沒有問題后蛔糯,合并到master分支:
git checkout master
git merge --no-ff release-1.2
# 對合并生成的新節(jié)點(diǎn),做一個標(biāo)簽
git tag -a 1.2
# 再合并到develop分支
git checkout develop
git merge --no-ff release-1.2
# 最后窖式,刪除預(yù)發(fā)布分支:
git branch -d release-1.2
- 修補(bǔ)bug(fixbug)分支蚁飒。軟件正式發(fā)布以后,難免會出現(xiàn)bug脖镀。這時就需要創(chuàng)建一個分支飒箭,進(jìn)行bug修補(bǔ)狼电。修補(bǔ)bug分支是從Master分支上面分出來的蜒灰。修補(bǔ)結(jié)束以后,再合并進(jìn)Master和Develop分支肩碟。它的命名强窖,可以采用fixbug-*的形式。
# 創(chuàng)建一個修補(bǔ)bug分支
git checkout -b fixbug-0.1 master
# 修補(bǔ)結(jié)束后削祈,合并到master分支:
git checkout master
git merge --no-ff fixbug-0.1
git tag -a 0.1.1
# 再合并到develop分支
git checkout develop
git merge --no-ff fixbug-0.1
# 最后翅溺,刪除"修補(bǔ)bug分支":
git branch -d fixbug-0.1
Git 遠(yuǎn)程管理
Git服務(wù)器遷移另外一臺GIT服務(wù)器
前提條件:
first.git已存在
-
second.git 待同步倉儲 第一次需初始化.
可以在gitlab,github網(wǎng)頁初始化,空項目髓抑,不要初始化README.md等
可以以命令行方式初始化
git init --bare
方式一:
git clone --bare https://first.git First-Server
cd First-Server
git add tencent https://second.git
git push tencent --all
方式二:
git clone --mirror https://first.git First-Server
cd First-Server
git push --mirror https://second.git
SVN服務(wù)器遷移到GIT服務(wù)器
svn代碼遷移到git服務(wù)器咙崎,主要用到git-svn命令
# 創(chuàng)建user.txt 提交記錄映射表
svn log --xml | grep author | sort -u | perl -pe 's/.*>(.*?)<.*/$1 = /'
# 拉取svn代碼
git svn clone http://svn_address --authors-file=users.txt --no-metadata -s my_project
# 如果提交記錄太多,可選取最近提交記錄吨拍,以下是取最近5000次
git svn clone -r5000:HEAD svn_address --authors-file=users.txt --no-metadata -s my_project
# 清理工作
cp -Rf .git/refs/remotes/origin/tags/* .git/refs/tags/
rm -Rf .git/refs/remotes
# 添加git服務(wù)器地址褪猛,并上傳
git remote add origin git@my-git-server:myrepository.git
git push origin --all
綁定多個服務(wù)器
方式一:git remote add
git remote -v
git remote add tecent https://xxx.git
git push origin master:master
git push tecent master:master
方式二 git remote set-url
git remote set-url --add https://xxx.git
cat .git/config
git push origin --all
合并沖突處理
git merge 分支名
//有沖突的話,通過IDE解決沖突,
git status //查看狀態(tài)然后再執(zhí)行
git add
git commit
服務(wù)器選擇
git服務(wù)器選擇羹饰,如果是小團(tuán)隊的話伊滋,建議直接服務(wù)器安裝git后,命令行直接創(chuàng)建队秩,也可以選擇gitlab搭建笑旺,當(dāng)然如果不介意公網(wǎng),想更可視化查看代碼馍资,也可以考慮一些云服務(wù)器筒主,目前國內(nèi)的碼云,阿里云鸟蟹,騰訊云,以及國外的github等都提供免費(fèi)的個人代碼云倉儲乌妙。