Git

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 找到想要撤銷的id

  • git 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ā)小程序迭代纯命,就命名了 wechat

  • release: 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)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市南捂,隨后出現(xiàn)的幾起案子吴裤,更是在濱河造成了極大的恐慌,老刑警劉巖黑毅,帶你破解...
    沈念sama閱讀 218,607評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嚼摩,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)枕面,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門愿卒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人潮秘,你說(shuō)我怎么就攤上這事琼开。” “怎么了枕荞?”我有些...
    開封第一講書人閱讀 164,960評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵柜候,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我躏精,道長(zhǎng)渣刷,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,750評(píng)論 1 294
  • 正文 為了忘掉前任矗烛,我火速辦了婚禮辅柴,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘瞭吃。我一直安慰自己碌嘀,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,764評(píng)論 6 392
  • 文/花漫 我一把揭開白布歪架。 她就那樣靜靜地躺著股冗,像睡著了一般。 火紅的嫁衣襯著肌膚如雪和蚪。 梳的紋絲不亂的頭發(fā)上止状,一...
    開封第一講書人閱讀 51,604評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音惠呼,去河邊找鬼导俘。 笑死,一個(gè)胖子當(dāng)著我的面吹牛剔蹋,可吹牛的內(nèi)容都是我干的旅薄。 我是一名探鬼主播,決...
    沈念sama閱讀 40,347評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼泣崩,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼少梁!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起矫付,我...
    開封第一講書人閱讀 39,253評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤凯沪,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后买优,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體妨马,經(jīng)...
    沈念sama閱讀 45,702評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡挺举,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,893評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了烘跺。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片湘纵。...
    茶點(diǎn)故事閱讀 40,015評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖滤淳,靈堂內(nèi)的尸體忽然破棺而出梧喷,到底是詐尸還是另有隱情,我是刑警寧澤脖咐,帶...
    沈念sama閱讀 35,734評(píng)論 5 346
  • 正文 年R本政府宣布铺敌,位于F島的核電站,受9級(jí)特大地震影響屁擅,放射性物質(zhì)發(fā)生泄漏偿凭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,352評(píng)論 3 330
  • 文/蒙蒙 一煤蹭、第九天 我趴在偏房一處隱蔽的房頂上張望笔喉。 院中可真熱鬧,春花似錦硝皂、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至折欠,卻和暖如春贝或,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背锐秦。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工咪奖, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人酱床。 一個(gè)月前我還...
    沈念sama閱讀 48,216評(píng)論 3 371
  • 正文 我出身青樓羊赵,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親扇谣。 傳聞我的和親對(duì)象是個(gè)殘疾皇子昧捷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,969評(píng)論 2 355

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

  • 原文推薦: A successful Git branching model 這個(gè)文章講的是Git分支模型的原理及...
    SonyaBaby閱讀 1,504評(píng)論 0 0
  • Git 倉(cāng)庫(kù)申請(qǐng)流程 1. 開發(fā)主管向Git 管理員提交Git 倉(cāng)庫(kù)申請(qǐng)【郵件:發(fā)送給Git 管理員,抄送給項(xiàng)目經(jīng)...
    騷包霸天虎閱讀 2,080評(píng)論 0 0
  • Git 命令 mkdir testcd testtouch a.md alias 設(shè)置別名 git config ...
    任教主來(lái)也閱讀 671評(píng)論 0 0
  • Git 命令行學(xué)習(xí)筆記 Git 基礎(chǔ) 基本原理 客戶端并不是只提取最新版本的文件快照罐寨,而是把代碼倉(cāng)庫(kù)完整的鏡像下來(lái)...
    sunnyghx閱讀 3,921評(píng)論 0 11
  • 請(qǐng)務(wù)必認(rèn)真閱讀和理解本《用戶服務(wù)協(xié)議》(以下簡(jiǎn)稱《協(xié)議》)中規(guī)定的所 有權(quán)利和限制靡挥。除非您接受本《協(xié)議》條款,否則...
    提摩東閱讀 1,112評(píng)論 0 98