Git進(jìn)階(二)
創(chuàng)新互聯(lián)公司是由多位在大型網(wǎng)絡(luò)公司、廣告設(shè)計(jì)公司的優(yōu)秀設(shè)計(jì)人員和策劃人員組成的一個(gè)具有豐富經(jīng)驗(yàn)的團(tuán)隊(duì),其中包括網(wǎng)站策劃、網(wǎng)頁美工、網(wǎng)站程序員、網(wǎng)頁設(shè)計(jì)師、平面廣告設(shè)計(jì)師、網(wǎng)絡(luò)營銷人員及形象策劃。承接:成都做網(wǎng)站、成都網(wǎng)站建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站改版、網(wǎng)頁設(shè)計(jì)制作、網(wǎng)站建設(shè)與維護(hù)、網(wǎng)絡(luò)推廣、數(shù)據(jù)庫開發(fā),以高性價(jià)比制作企業(yè)網(wǎng)站、行業(yè)門戶平臺(tái)等全方位的服務(wù)。===============================================================================
概述:
===============================================================================
1.分支命名法則及常用命令
master(主干分支) 是指向指定分支的最近一次提交;
dev 是指向dev分支的最近一次提交;
不管有多少分支,活動(dòng)分支只能有一個(gè);
head 一定是指向某個(gè)分支的,head表示? 映射了當(dāng)前工作目錄當(dāng)中所反映的最近一次提交;即 head始終指向活動(dòng)分支的最近一次提交;
★分支命名法則
可以使用"/",但不能使用"/"結(jié)尾;
不能以 "-" 開頭;
以位于 "/" 后面的組件,不能以 "." 開頭;
不能使用連續(xù)的 "...";
不能使用空白字符" ";
不能使用"^","~","?","*","[" 等符號(hào)
必須唯一,分支的名字始終指向目標(biāo)分支的最近一次提交;
★git branch :列出,創(chuàng)建及刪除分支
git branch BRANCH_NAME [START_COMMIT]
git branch? -d??BRANCH_NAME? 刪除分支
★git show-branch:查看分支及其相關(guān)的提交
★git? checkout?
git? checkout?
檢出分支
演示1:git 創(chuàng)建分支
[root@node1?test]#?ls first.sh??INSTALL??readmin??subdir [root@node1?test]#?git?branch?--list *?master???#?帶"*"表示當(dāng)前分支 [root@node1?test]#?git?log commit?3c0b6864718ec8f8aebb5b66fbfd65b757504169?(HEAD?->?master) Author:?watao?演示2:git show-branch? 查看分支
#??git?show-branch?查看具體的分支信息 [root@node1?test]#?git?show-branch !?[bug/first]?v1.1 ?!?[dev]?v1.0 ??*?[master]?v1.1 --- +?*?[bug/first]?v1.1 ++*?[dev]?v1.0 [root@node1?test]#?git?show-branch?dev [dev]?v1.0 [root@node1?test]#? [root@node1?test]#?git?show-branch?bug/first [bug/first]?v1.1演示3:git checkout BRANCH_NAME? 切換分支
[root@node1?taotao]#?git?checkout?dev??#切換分支 Switched?to?branch?'dev' [root@node1?taotao]#? [root@node1?taotao]#?git?branch?--list? ??bug/first *?dev ??master [root@node1?taotao]#? [root@node1?taotao]#?git?show-branch !?[bug/first]?v1.1 ?*?[dev]?v1.0 ??!?[master]?v1.1 --- +?+?[bug/first]?v1.1 +*+?[dev]?v1.0 [root@node1?taotao]#? [root@node1?taotao]#? [root@node1?taotao]#?git?log commit?5d4298d6fdcbb6276e69f002e7148210124e52d9?(HEAD?->?dev) Author:?watao?演示4:git checkout -d BRANCH_NAME 刪除分支
[root@node1?taotao]#?git?branch?-d?bug/first? Deleted?branch?bug/first?(was?5685269). [root@node1?taotao]#?git?branch?--list ??dev *?master1.分支合并--git merge
★相關(guān)概念
合并基礎(chǔ):要合并的分支的最近一次的共同提交;
我們的版本:當(dāng)前分支的最近一次提交;
他們的版本:要合并進(jìn)來的分支的最近一次提交;
☉無沖突合并:
git checkout master;? ?檢出到主分支
git status???檢查是否有未提交的信息
git merge BRANCH_NAME???從他們的版本合并到我們的版本
git log --graph --pretty=oneline --abbrev-commit? ?以圖形的方式查看
☉有沖突合并:
手動(dòng)解決沖突;
解決完成之后:git add ---> git commit
☉回退到合并之前的版本
git reset --hard ORIG_HEAD
演示1:無沖突的合并
[root@node1?taotao]#?git?branch?--list ??dev *?master [root@node1?taotao]#? [root@node1?taotao]#? [root@node1?taotao]#?git?merge?dev Merge?made?by?the?'recursive'?strategy. ?first.sh??|?1?+ ?second.sh?|?2?++ ?2?files?changed,?3?insertions(+) ?create?mode?100644?second.sh [root@node1?taotao]#? [root@node1?taotao]#?git?status On?branch?master nothing?to?commit,?working?tree?clean [root@node1?taotao]#?git?show-branch !?[dev]?v1.1.1-dev ?*?[master]?Merge?branch?'dev' -- ?-?[master]?Merge?branch?'dev' +*?[dev]?v1.1.1-dev [root@node1?taotao]#?git?log?--graph?--pretty=oneline?--abbrev-commit *???43d8e9a?(HEAD?->?master)?Merge?branch?'dev' |\?? |?*?21a0411?(dev)?v1.1.1-dev |?*?587719d?v1.1-dev *?|?5685269?v1.1 |/?? *?5d4298d?v1.0 *?b918244?v0.0.2 *?1b5d8e0?v0.0.1演示2:有沖突的合并
[root@node1?taotao]#?echo?"taotaohuihui"?>?my.txt [root@node1?taotao]#?git?add?my.txt [root@node1?taotao]#?git?commit?-m?"v2.0" [master?1df3da7]?v2.0 ?1?file?changed,?1?insertion(+) ?create?mode?100644?my.txt ? ?[root@node1?taotao]#?git?log?--graph?--pretty=oneline?--abbrev-commit *?1df3da7?(HEAD?->?master)?v2.0???#?新創(chuàng)建的提交 *???43d8e9a?Merge?branch?'dev' |\?? |?*?21a0411?(dev)?v1.1.1-dev |?*?587719d?v1.1-dev *?|?5685269?v1.1 |/?? *?5d4298d?v1.0 *?b918244?v0.0.2 *?1b5d8e0?v0.0.1 [root@node1?taotao]#?git?branch?dev fatal:?A?branch?named?'dev'?already?exists.???#dev分支存在不能創(chuàng)建相同的,實(shí)際上可以刪除了,因?yàn)橐呀?jīng)合并到master分支上去了 [root@node1?taotao]#? [root@node1?taotao]#? [root@node1?taotao]#?git?branch?fotfix???#?在master?2.0?的基礎(chǔ)上常見fotfix分支 [root@node1?taotao]#?git?show-branch !?[dev]?v1.1.1-dev ?!?[fotfix]?v2.0 ??*?[master]?v2.0 --- ?+*?[fotfix]?v2.0 ?--?[fotfix^]?Merge?branch?'dev' ++*?[dev]?v1.1.1-dev [root@node1?taotao]#?echo?"third?line"?>>?first.sh???#?修改master分支的內(nèi)容 [root@node1?taotao]#?cat?first.sh? #!/bin/bash echo?"hello?world" echo?"new?date" third?line [root@node1?taotao]#?git?add?first.sh [root@node1?taotao]#?git?commit?-m?"v2.1" [master?697a6c5]?v2.1 ?1?file?changed,?1?insertion(+) [root@node1?taotao]#?git?show-branch !?[dev]?v1.1.1-dev ?!?[fotfix]?v2.0 ??*?[master]?v2.1 --- ??*?[master]?v2.1 ?+*?[fotfix]?v2.0 ?--?[fotfix^]?Merge?branch?'dev' ++*?[dev]?v1.1.1-dev [root@node1?taotao]#?git?checkout?fotfix??#切換到fotfix分支 Switched?to?branch?'fotfix' [root@node1?taotao]#?ls first.sh??INSTALL??my.txt??readmin??second.sh??subdir [root@node1?taotao]#? [root@node1?taotao]#?echo?"new?line"?>>?first.sh???#?編輯first文件并提交 [root@node1?taotao]#?cat?first.sh #!/bin/bash echo?"hello?world" echo?"new?date" new?line [root@node1?taotao]#?git?add?first.sh [root@node1?taotao]#?git?commit?-m?"v2.0-1" [fotfix?26b42ef]?v2.0-1 ?1?file?changed,?1?insertion(+) ? ?[root@node1?taotao]#?git?show-branch !?[dev]?v1.1.1-dev ?*?[fotfix]?v2.0-1 ??!?[master]?v2.1 --- ?*??[fotfix]?v2.0-1 ??+?[master]?v2.1 ?*+?[fotfix^]?v2.0 ?--?[fotfix~2]?Merge?branch?'dev' +*+?[dev]?v1.1.1-dev #?切回主分支,然后合并?fotfix分支,發(fā)現(xiàn)報(bào)錯(cuò),即內(nèi)容發(fā)生沖突。需手動(dòng)修復(fù)沖突后再合并 [root@node1?taotao]#?git?checkout?master Switched?to?branch?'master' [root@node1?taotao]#? [root@node1?taotao]#? [root@node1?taotao]#?git?merge?fotfix? Auto-merging?first.sh CONFLICT?(content):?Merge?conflict?in?first.sh Automatic?merge?failed;?fix?conflicts?and?then?commit?the?result. 不能合并成功的文件,發(fā)現(xiàn)三個(gè)版本中?first.sh?內(nèi)容各不相同 [root@node1?taotao]#?git?ls-files INSTALL first.sh first.sh first.sh my.txt readmin second.sh subdir/1.txt [root@node1?taotao]#? [root@node1?taotao]#?git?ls-files?--unmerged 100644?816a1b1e686cf6adb716b10e1a9eed870b2f18fa?1first.sh???#?"1"?表示合并基礎(chǔ) 100644?3adec3b3bf2616c52eaba36bd8af2e79e9ef6495?2first.sh???#?"2"?表示我們的版本 100644?e45ccd5a231f9debdd84ffd621cdc3acfc8d15f1?3first.sh???#?"3"?表示他們的版本 [root@node1?taotao]#?cat?first.sh? #!/bin/bash echo?"hello?world" echo?"new?date" <<<<<<>>>>>>?fotfix [root@node1?taotao]#?git?diff diff?--cc?first.sh index?3adec3b,e45ccd5..0000000 ---?a/first.sh +++?b/first.sh @@@?-1,4?-1,4?+1,8?@@@ ??#!/bin/bash ??echo?"hello?world" ??echo?"new?date" ++<<<<<<>>>>"為三方合并標(biāo)記,由2個(gè)?++?開頭 ?+third?line??#為主分支最近一次提交的內(nèi)容 ++======= +?new?line ++>>>>>>>?fotfix??#為其他版本最近一次提交的內(nèi)容 #直接在沖突文件的基礎(chǔ)上修改即可,如想要都保留的話就把"三方合并標(biāo)記"給刪除 [root@node1?taotao]#?vim?first.sh? [root@node1?taotao]#?git?diff diff?--cc?first.sh index?3adec3b,e45ccd5..0000000 ---?a/first.sh +++?b/first.sh @@@?-1,4?-1,4?+1,5?@@@ ??#!/bin/bash ??echo?"hello?world" ??echo?"new?date" ?+third?line??#新加的兩行 +?new?line [root@node1?taotao]#?cat?first.sh? #!/bin/bash echo?"hello?world" echo?"new?date" third?line new?line #修改好之后重新添加到索引并提交 [root@node1?taotao]#?git?add?first.sh [root@node1?taotao]#?git?commit??#出現(xiàn)內(nèi)容提示,保存即可 [master?dd73764]?Merge?branch?'fotfix' [root@node1?taotao]#?git?log?--graph?--pretty=oneline?--abbrev-commit *???dd73764?(HEAD?->?master)?Merge?branch?'fotfix' |\?? |?*?26b42ef?(fotfix)?v2.0-1 *?|?697a6c5?v2.1 |/?? *?1df3da7?v2.0 *???43d8e9a?Merge?branch?'dev' |\?? |?*?21a0411?(dev)?v1.1.1-dev |?*?587719d?v1.1-dev *?|?5685269?v1.1 |/?? *?5d4298d?v1.0 *?b918244?v0.0.2 *?1b5d8e0?v0.0.1演示3:回到合并之前的版本
#回到合并之前的版本 [root@node1?taotao]#?git?reset?--hard?ORIG_HEAD HEAD?is?now?at?697a6c5?v2.1 [root@node1?taotao]#?git?log?--graph?--pretty=oneline?--abbrev-commit *?697a6c5?(HEAD?->?master)?v2.1 *?1df3da7?v2.0 *???43d8e9a?Merge?branch?'dev' |\?? |?*?21a0411?(dev)?v1.1.1-dev |?*?587719d?v1.1-dev *?|?5685269?v1.1 |/?? *?5d4298d?v1.0 *?b918244?v0.0.2 *?1b5d8e0?v0.0.1 [root@node1?taotao]#?git?show-branch !?[dev]?v1.1.1-dev ?!?[fotfix]?v2.0-1 ??*?[master]?v2.1 --- ?+??[fotfix]?v2.0-1 ??*?[master]?v2.1 ?+*?[fotfix^]?v2.0 ?--?[fotfix~2]?Merge?branch?'dev' ++*?[dev]?v1.1.1-dev [root@node1?taotao]#?cat?first.sh? #!/bin/bash echo?"hello?world" echo?"new?date" third?line??#原來的文件還在 [root@node1?taotao]#?git?checkout?fotfix? Switched?to?branch?'fotfix' [root@node1?taotao]#?cat?first.sh? #!/bin/bash echo?"hello?world" echo?"new?date" new?line???#原來的文件還在1.git變基分支合并--git rebase
★變基操作
$ git checkout dev?: 首先切換到要變基的分支;
$ git rebase master: 把他的基從最近一次的共同祖先提交轉(zhuǎn)換為master的最新提交;
$ git checkout master :回到master分支;
$ git merge -m "MSG"?:master 獲取新的提交。
演示:
[root@node1?taotao]#?git?checkout?master Switched?to?branch?'master' [root@node1?taotao]#?ls first.sh??INSTALL??my.txt??readmin??second.sh??subdir [root@node1?taotao]#?cat?first.sh? #!/bin/bash echo?"hello?world" echo?"new?date" third?line [root@node1?taotao]#?vim?first.sh? [root@node1?taotao]#?cat?first.sh??#編輯文件先解決沖突,以便于演示git變基操作 #!/bin/bash echo?"hello?world" echo?"new?date" #再次提交一次 [root@node1?taotao]#?git?add?first.sh [root@node1?taotao]#?git?commit?-m?"v2.2" [master?7961be2]?v2.2 ?1?file?changed,?1?deletion(-) ?[root@node1?taotao]#?git?log?--graph?--pretty=oneline?--abbrev-commit *?7961be2?(HEAD?->?master)?v2.2 *?697a6c5?v2.1 *?1df3da7?v2.0 *???43d8e9a?Merge?branch?'dev' |\?? |?*?21a0411?(dev)?v1.1.1-dev |?*?587719d?v1.1-dev *?|?5685269?v1.1 |/?? *?5d4298d?v1.0 *?b918244?v0.0.2 *?1b5d8e0?v0.0.1 #切換到要變基的分支 [root@node1?taotao]#?git?checkout?fotfix Switched?to?branch?'fotfix' [root@node1?taotao]#?ls first.sh??INSTALL??my.txt??readmin??second.sh??subdir [root@node1?taotao]#?cat?first.sh? #!/bin/bash echo?"hello?world" echo?"new?date" new?line??#?新增加的一行 #執(zhí)行變基操作,表示把當(dāng)前?fotfix的基變?yōu)閙aster分支的最近一次提交 [root@node1?taotao]#?git?rebase?master First,?rewinding?head?to?replay?your?work?on?top?of?it... Applying:?v2.0-1 [root@node1?taotao]#?cat?first.sh? #!/bin/bash echo?"hello?world" echo?"new?date" new?line [root@node1?taotao]#?git?checkout?master Switched?to?branch?'master' [root@node1?taotao]#?cat?first.sh? #!/bin/bash echo?"hello?world" echo?"new?date"??#?此時(shí)沒有新行,需執(zhí)行合并操作 [root@node1?taotao]#?git?merge?fotfix? Updating?7961be2..3eaaead Fast-forward?#?快進(jìn)合并 ?first.sh?|?1?+ ?1?file?changed,?1?insertion(+) ?[root@node1?taotao]#?cat?first.sh? #!/bin/bash echo?"hello?world" echo?"new?date" new?line [root@node1?taotao]#?git?log?--graph?--pretty=oneline?--abbrev-commit *?3eaaead?(HEAD?->?master,?fotfix)?v2.0-1 *?7961be2?v2.2 *?697a6c5?v2.1 *?1df3da7?v2.0 *???43d8e9a?Merge?branch?'dev' |\?? |?*?21a0411?(dev)?v1.1.1-dev |?*?587719d?v1.1-dev *?|?5685269?v1.1 |/?? *?5d4298d?v1.0 *?b918244?v0.0.2 *?1b5d8e0?v0.0.1另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。