Vcs-Git 版本控制速覽

原文鏈接: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)的個人代碼云倉儲乌妙。

  • Git 命令行直接搭建 git init —bare
  • 搭建gitlab內(nèi)網(wǎng)環(huán)境
  • 選擇免費(fèi)的云服務(wù)器代碼托管 github碼云戏锹,阿里云冠胯,騰訊云等。

參考

推薦閱讀

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末锦针,一起剝皮案震驚了整個濱河市荠察,隨后出現(xiàn)的幾起案子置蜀,更是在濱河造成了極大的恐慌,老刑警劉巖悉盆,帶你破解...
    沈念sama閱讀 221,430評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件盯荤,死亡現(xiàn)場離奇詭異,居然都是意外死亡焕盟,警方通過查閱死者的電腦和手機(jī)秋秤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評論 3 398
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來脚翘,“玉大人灼卢,你說我怎么就攤上這事±磁” “怎么了鞋真?”我有些...
    開封第一講書人閱讀 167,834評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長沃于。 經(jīng)常有香客問我涩咖,道長,這世上最難降的妖魔是什么繁莹? 我笑而不...
    開封第一講書人閱讀 59,543評論 1 296
  • 正文 為了忘掉前任檩互,我火速辦了婚禮,結(jié)果婚禮上咨演,老公的妹妹穿的比我還像新娘闸昨。我一直安慰自己,他們只是感情好雪标,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,547評論 6 397
  • 文/花漫 我一把揭開白布零院。 她就那樣靜靜地躺著,像睡著了一般村刨。 火紅的嫁衣襯著肌膚如雪告抄。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,196評論 1 308
  • 那天嵌牺,我揣著相機(jī)與錄音打洼,去河邊找鬼。 笑死逆粹,一個胖子當(dāng)著我的面吹牛募疮,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播僻弹,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼阿浓,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蹋绽?” 一聲冷哼從身側(cè)響起芭毙,我...
    開封第一講書人閱讀 39,671評論 0 276
  • 序言:老撾萬榮一對情侶失蹤筋蓖,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后退敦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體粘咖,經(jīng)...
    沈念sama閱讀 46,221評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,303評論 3 340
  • 正文 我和宋清朗相戀三年侈百,在試婚紗的時候發(fā)現(xiàn)自己被綠了瓮下。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,444評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡钝域,死狀恐怖讽坏,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情网梢,我是刑警寧澤震缭,帶...
    沈念sama閱讀 36,134評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站战虏,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏党涕。R本人自食惡果不足惜烦感,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,810評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望膛堤。 院中可真熱鬧手趣,春花似錦、人聲如沸肥荔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽燕耿。三九已至中符,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間誉帅,已是汗流浹背淀散。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蚜锨,地道東北人档插。 一個月前我還...
    沈念sama閱讀 48,837評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像亚再,于是被迫代替她去往敵國和親郭膛。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,455評論 2 359

推薦閱讀更多精彩內(nèi)容