Git 為開源分布式版本控件工具
Git 工作原理
工作區(qū)(Working Directory):倉(cāng)庫(kù)文件夾里除 .git 目錄以外的內(nèi)容
-
版本庫(kù)(Repository): .git 目錄遮精,用于存儲(chǔ)記錄版本信息
暫緩存(stage)
分支 (master): git 自動(dòng)創(chuàng)建的第一個(gè)分支
HEAD 指針: 用于指向當(dāng)前分支
-
git add 和 git commit 的原理
git add : 把文件修改添加到暫存區(qū)
git commit : 把暫存區(qū)的所有內(nèi)容提交到當(dāng)前分支
Git 常用命令
Git 初始化
git init
配置用戶 與 郵箱
git config user.name "redoca"
git config user.email "redoca@163.com"
查看文件的狀態(tài)
git status
添加文件至?xí)壕弲^(qū)
git add xxx.swift
git add . 添加所有文件至?xí)壕弲^(qū)
修改文件后也是通過(guò) git add 來(lái)添加至?xí)壕弲^(qū)
git reset HEAD README.md
取消已緩存的內(nèi)容
刪除文件
git rm -rf *
-r 遞歸悠砚, 如果刪除之前修改過(guò)并且已經(jīng)放到暫存區(qū)域的話暴匠,則必須要用強(qiáng)制刪除選項(xiàng) -f, * 全部文件阀圾,也可指定文件票灰。
git rm --cache README.md
文件從暫存區(qū)域移除,但仍然希望保留在當(dāng)前工作目錄赏廓。
移動(dòng)或重命名文件
git mv README README.md
提交至版本中
git commit -m "初始化項(xiàng)目"
git commit -am "fix bug"
如果你覺(jué)得 git add 提交緩存的流程太過(guò)繁瑣狠鸳,Git 也允許你用 -a 選項(xiàng)跳過(guò)這一步
查看歷史版本
git log
git reflog
查看分支引用記錄 簡(jiǎn)潔顯示配置帶顏色的 log 別名
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
撤銷commit / 版本之間切換
git log
找到想要撤銷的idgit reset --hard e695b67
完成撤銷, 同時(shí)將代碼恢復(fù)到前一commit_id 對(duì)應(yīng)的版本git reset --hard HEAD
回到當(dāng)前版本,放棄所有沒(méi)有提交的修改git reset --hard HEAD^
回到上一個(gè)版本git reset --hard HEAD~3
回到之前第3個(gè)修訂版本git reset id
完成版本切換(Commit命令的撤銷)留瞳,但是不對(duì)代碼修改進(jìn)行撤銷拒迅,可以直接通過(guò) git commit 重新提交對(duì)本地代碼的修改
替換本地改動(dòng)
git checkout -- <filename>
此命令會(huì)使用 HEAD 中的最新內(nèi)容替換掉你的工作目錄中的文件。已添加到暫存區(qū)的改動(dòng)以及新文件都不會(huì)受到影響她倘。
丟棄你在本地的所有改動(dòng)與提交璧微,可以到服務(wù)器上獲取最新的版本歷史,并將你本地主分支指向它:
git fetch origin
git reset --hard origin/master
推送改動(dòng)
git push origin master
執(zhí)行命令以將這些改動(dòng)提交到遠(yuǎn)端倉(cāng)庫(kù)帝牡,可以把 master 換成你想要推送的任何分支
倉(cāng)庫(kù)連接到遠(yuǎn)程服務(wù)器
git remote add origin <server>
分支
創(chuàng)建一個(gè)叫做“feature_x”的分支往毡,并切換過(guò)去:
git checkout -b feature_x
切換回主分支:
git checkout master
再把新建的分支刪掉:
git branch -d feature_x
除非你將分支推送到遠(yuǎn)端倉(cāng)庫(kù),不然該分支就是 不為他人所見的:
git push origin <branch>
更新與合并
git pull
更新本地倉(cāng)庫(kù)至最新改動(dòng)
git merge <branch>
合并分支
git add <filename>
合并后修改有沖突的文件執(zhí)行此命令來(lái)標(biāo)記合并成功靶溜。
git diff <source_branch> <target_branch>
在合并改動(dòng)之前开瞭,你可以使用如下命令預(yù)覽差異
標(biāo)簽
為軟件發(fā)布創(chuàng)建標(biāo)簽是推薦的。你可以執(zhí)行如下命令創(chuàng)建一個(gè)叫做 1.0.0 的標(biāo)簽罩息,(gitee中可通過(guò)發(fā)行版功能打生產(chǎn)標(biāo)簽):
git tag 1.0.0 1b2e1d63ff
git命令起別名
git config alias.st "status"
git config alias.ci "commit -m"
--global 全局設(shè)置
在設(shè)置用戶或起別名時(shí)可以通過(guò) --global 進(jìn)行全局設(shè)置
檢出遠(yuǎn)程倉(cāng)庫(kù)
git clone username@host:/path/to/repository
git clone /path/to/repository
創(chuàng)建一個(gè)本地倉(cāng)庫(kù)的克隆版本
.gitignore 忽略文件
.gitignore可以指定哪些文件不納入版本庫(kù)的管理
參考網(wǎng)址:https://github.com/github/gitignore
Git Flow GIT操作規(guī)范
Git Flow是構(gòu)建在Git之上的一個(gè)組織軟件開發(fā)活動(dòng)的模型嗤详,是在Git之上構(gòu)建的一項(xiàng)軟件開發(fā)最佳實(shí)踐。Git Flow是一套使用Git進(jìn)行源代碼管理時(shí)的一套行為規(guī)范和簡(jiǎn)化部分Git操作的工具瓷炮。
Git Flow中的分支
master分支 master 分支始終是最穩(wěn)定的代碼分支葱色,我們每一次迭代開發(fā)完后發(fā)布到市場(chǎng)版本的代碼分支,每次提交到master的代碼都必須打上標(biāo)簽標(biāo)示版本號(hào)娘香。
develop分支 我們稱為開發(fā)分支苍狰,又稱集成分支(integration branch),輔助分支完成自己的開發(fā)之后都會(huì)合并到develop分支烘绽,確定要把當(dāng)前已經(jīng)集成的功能發(fā)布一個(gè)版本的時(shí)候淋昭,就需要把devlop分支合并到master分支(下面會(huì)介紹中間其實(shí)還有一個(gè)release分支),并打上帶版本號(hào)的標(biāo)簽安接。
輔助分支 輔助分支也是開發(fā)人員主要使用的分支翔忽,輔助分支主要用于組織軟件新功能的并行開發(fā)、簡(jiǎn)化新功能開發(fā)代碼的跟蹤、輔助完成版本發(fā)布工作以及對(duì)生產(chǎn)代碼的緊急修復(fù)工作歇式。與主分支不同驶悟,輔助分支通常只會(huì)在有限的時(shí)間范圍內(nèi)存在,完成輔助分支的使命后一般會(huì)被刪除材失。
輔助分支包括:
-
feature分支
feature 分支就是我們每一次需求迭代開發(fā)的分支痕鳍,每一個(gè)需求迭代,我們可以在develop 分支上拉去多個(gè) feature 分支豺憔,也可以在別人的 feature 分支上拉去 另一個(gè)feature 分支额获,等f(wàn)eature 分支開發(fā)完成后,我們需要將feature 分支 合回到 develop 分支上
-
release分支
release 分支是類似于預(yù)生產(chǎn)的分支恭应,當(dāng)我們的一個(gè)迭代的需求開發(fā)完成后,開發(fā)分支 feature 已經(jīng)合并回了 develop 分支上后耘眨,我們需要拉取 release 分支昼榛,也可以理解為當(dāng)我們開始提測(cè)的時(shí)候,我們來(lái)拉去 release 分支剔难,在這個(gè)分支上進(jìn)行修改bug
當(dāng)我們的 release 分支開發(fā)完后胆屿,我們需要將 release 分支合回 develop 分支 和master 分支 當(dāng)release 分支合并到 master 分支上后,我們記得在 master 分支上打一個(gè) tag
-
hotfix分支
hotfix 分支是當(dāng)我們線上應(yīng)用出現(xiàn)了重大的bug偶宫,這時(shí)我們需要發(fā)布一個(gè)緊急修復(fù)版本非迹,這時(shí)我們需要在 master 分支上拉去 一個(gè) hotfix分支
hotfix分支 開發(fā)完后,我們同樣是需要合并回 master 分支 和 develop 分支 當(dāng)hotfix 分支合并到 master 分支上后纯趋,我們記得在 master 分支上打一個(gè) tag
分支命名規(guī)范
master: master 分支就叫master 分支
develop: develop 分支就叫develop 分支
feature: feature 分支 咱們暫時(shí)可以按
feature_wechat_v2.0.1
這種命名規(guī)范來(lái)憎兽,后面有更好的命名規(guī)范咱們?cè)俑摹?code>v2.0.1 表示當(dāng)前迭代的版本號(hào),wechat
表示當(dāng)前迭代的名稱吵冒,這里我們是開發(fā)小程序迭代纯命,就命名了 wechatrelease: release 分支的名稱我們直接命名為這次需求的版本號(hào),比如:
2.0.1
痹栖, 因?yàn)楹竺娈?dāng)我們使用gitFlow 工具時(shí)亿汞,當(dāng)我們完成release 分支時(shí),這個(gè) release 分支名會(huì)直接 當(dāng)做 在master 上的 tag名揪阿,這樣我們就不需要再 在master 分支上打 tag了hotfix: hotfix 分支的命名我們暫時(shí)可以按
hotfix_v2.0.2
這種來(lái)進(jìn)行命名疗我,v2.0.2
表示這次修復(fù)的版本的版本號(hào)