87.分支及遠程分支管理 標籤 別名

22.9 分支管理linux

22.10 遠程分支管理git

22.11 標籤管理github

22.12 git別名vim

 

 

 

 

!!22.9 分支管理命令行

 

 

基本操做3d

1.git branch //查看分支日誌

2.git branch aming //建立分支orm

3.git checkout aming //切換到了aming分支下索引

4.再用git branch查看,會看到有兩個分支master和aming,當前使用的分支前面會有一個*在aming分支下 ,編輯2.txt,並提交到新分支ci

5.echo "askdfjlksadjflk" > 2.txt

6.git add 2.txt

7.git commit -m "laksjdflksjdklfj"

8.切換回master分支

git checkout master //此時cat 2.txt發現並無更改內容

 

分支的合併

合併的時候儘可能保證兩邊的數據沒有衝突才能夠

1.git checkout master //合併分支以前,先切換到目標分支

#將aming分支合併到master分支上去,要先切換到master分支上去

#合併以後兩個分支的變化是同樣的

2.git merge aming //把aming分支合併到了master

若是master分支和aming分支都對2.txt進行了編輯,當合並時會提示衝突,須要先解決衝突才能夠繼續合併。

解決衝突的方法是在master分支下,編輯2.txt,改成aming分支裏面2.txt的內容。 而後提交2.txt,再合併aming分支。

可是這樣有一個問題,萬一master分支更改的內容是咱們想要的呢? 能夠編輯2.txt內容,改成想要的,而後提交。切換到aming分支,而後合併master分支到aming分支便可(倒着合併)。合併分支有一個原則,那就是要把最新的分支合併到舊的分支。

!!也就是說merge後面跟的分支名字必定是最新的分支。

3.git branch -d aming //刪除分支

若是分支沒有合併,刪除以前會提示,那就不合並,強制刪除:

git branch -D aming #強制刪除

 

 

 

實例:

基本操做

1.

[root@axinlinux-01 ~]# cd /data/gitroot/ #要先進入你的項目裏

[root@axinlinux-01 gitroot]# git branch #查看分支

* master #星號表示當前所在的分支

2.

[root@axinlinux-01 gitroot]# git branch aming #建立分支

[root@axinlinux-01 gitroot]# git branch #能夠查看到剛建立的分支

aming

* master

3.

[root@axinlinux-01 gitroot]# git checkout aming #切換到aming分支下

切換到分支 'aming'

[root@axinlinux-01 gitroot]# git branch

* aming #星號表示所在的分支

master

[root@axinlinux-01 gitroot]# ls #aming分支跟在master分支的文件是同樣的

2.txt

4.

[root@axinlinux-01 gitroot]# vim 3.txt #在aming分支下建立3.txt

[root@axinlinux-01 gitroot]# git add 3.txt #推送到本地庫

[root@axinlinux-01 gitroot]# git commit -m "add 3.txt" #執行到commit就算是推送到本地庫了

[aming 6730eab] add 3.txt

1 file changed, 7 insertions(+)

create mode 100644 3.txt

[root@axinlinux-01 gitroot]# ls #在aming分支下是能夠看到的

2.txt 3.txt

[root@axinlinux-01 gitroot]# git checkout master #在切換到master分支下

切換到分支 'master'

[root@axinlinux-01 gitroot]# ls #是看不到的,這說明分支是相互隔離開的。分支跟分支之間操做的文件是不受影響的

2.txt

分支的合併

[root@axinlinux-01 gitroot]# git branch #先查看是否是在目標分支下

aming

* master

[root@axinlinux-01 gitroot]# ls #看一下現有的文件

2.txt

[root@axinlinux-01 gitroot]# git merge aming #將aming分支合併到當前坐在的分支下(master)

更新 1663deb..6730eab

Fast-forward

3.txt | 7 +++++++

1 file changed, 7 insertions(+)

create mode 100644 3.txt

[root@axinlinux-01 gitroot]# ls #再來看就有了以前在aming分支下建立的3.txt了

2.txt 3.txt

[root@axinlinux-01 gitroot]# git branch #查看一下分支所在

aming

* master

[root@axinlinux-01 gitroot]# vim 2.txt #更改一下2.txt

[root@axinlinux-01 gitroot]# git add 2.txt #推到本地倉庫

[root@axinlinux-01 gitroot]# git commit -m "ch 2.txt"

[master d551e46] ch 2.txt

1 file changed, 4 insertions(+)

create mode 100644 2.txt

[root@axinlinux-01 gitroot]# git checkout aming

切換到分支 'aming'

[root@axinlinux-01 gitroot]# vim 2.txt #在aming分支上,對2.txt作不一樣的變動

[root@axinlinux-01 gitroot]# git add 2.txt #再次提交

[root@axinlinux-01 gitroot]# git commit -m "ch 2.txt"

[aming 4396bef] ch 2.txt

1 file changed, 1 insertion(+)

create mode 100644 2.txt

[root@axinlinux-01 gitroot]# git checkout master #咱們再切換到master分支,準備作合併

切換到分支 'master'

[root@axinlinux-01 gitroot]# git merge aming #此時將aming合併過來就報錯了

自動合併 2.txt

衝突(添加/添加):合併衝突於 2.txt

自動合併失敗,修正衝忽然後提交修正的結果。 #由於咱們兩個變動的不同

[root@axinlinux-01 gitroot]# git checkout aming #此時咱們切換分支是切換不過去的

2.txt: needs merge

error: 您須要先解決當前索引的衝突

[root@axinlinux-01 gitroot]# vim 2.txt #打開這個文件,他會自動的幫咱們分析出差別

<<<<<<< HEAD

aaaaaaaaaaaaaaaaa

11111111111111111

bbbbbbbbbbbbbbbbb

ccccccccccccccccc

======= #上面是master的,下面是aming的

aaaaaaaaaaaaaaaaaaaaaa

>>>>>>> aming

此時,咱們能夠將aming的部分刪掉,保持和master一致

[root@axinlinux-01 gitroot]# git add 2.txt #而後再從新提交

[root@axinlinux-01 gitroot]# git commit -m "merge 2.txt"

[master 76eb0c0] merge 2.txt

[root@axinlinux-01 gitroot]# git merge aming #此時在合併就能夠了

Already up-to-date.

[root@axinlinux-01 gitroot]# git checkout aming #而後就能夠切換分支了

切換到分支 'aming'

 

 

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

 

 

22.10 遠程分支管理

 

 

 

使用分支的原則

對於分支的應用,建議你們以這樣的原則來:

1.master分支是很是重要的,線上發佈代碼用這個分支,平時咱們開發代碼不要在這個分支上。

#咱們克隆分支的時候只能把master分支克隆下來

2.建立一個dev分支,專門用做開發,只有當發佈到線上以前,纔會把dev分支合併到master

3.開發人員應該在dev的基礎上再分支成我的分支,我的分支(在本身pc上)裏面開發代碼,而後合併到dev分支

#也就是咱們建立一個dev的分支,在dev的基礎上再分支幾個我的的分支,各自寫本身負責的代碼。等寫完之後,每一個人再把各自的分支合併到dev裏面去。而後dev再合併到master裏面去

4.dev分支合併bob分支的命令是:

git checkout dev //先切換到dev分支,而後

git merge bob

 

遠程分支

1.本地新建的分支若是不推送到遠程,對其餘人就是不可見的

2.git ls-remote origin

#查看遠程分支 ,能夠看到全部分支

3.對於git push分支分兩種狀況(就是在本地master分支與dev分支都作了變動,那會推送哪個呢?)

第一種,當本地分支和遠程分支一致時(兩方都有同樣的分支)

git push會把全部本地分支的變動一同推送到遠程

若是想只推送一個分支,使用git push origin branch-name

第二種,當本地分支比遠程分支多,默認git push 只推送本地和遠程一致的分支,想要把多出來的本地分支推送到遠程時,使用git push origin branch-name 若是推送失敗,先用git pull抓取遠程的新提交

4.git checkout -b branch-name origin/branch-name(branch-name爲遠程分支的名字)

#git clone的時候默認只把master分支克隆下來,若是想把全部分支都克隆下來,須要手動建立,在本地建立和遠程分支對應的分支,使用origin/branch-name,本地和遠程分支的名稱要一致

 

總結:

要想把遠程的分支搞下來,使用git checkout -b (遠程分支名) origin/(遠程分支名)

把本地的分支推到遠程,使用git push origin (分支名)

 

 

實例:

咱們先打開遠程,建立一個新的文件

再建立一個分支dev

咱們把遠程的這個項目克隆到本地來

[root@axinlinux-01 tmp]# cd /data/

[root@axinlinux-01 data]# git clone https://github.com/axin-linux/aming_linux.git

正克隆到 'aming_linux'...

remote: Enumerating objects: 18, done.

remote: Counting objects: 100% (18/18), done.

remote: Compressing objects: 100% (11/11), done.

remote: Total 18 (delta 2), reused 9 (delta 0), pack-reused 0

Unpacking objects: 100% (18/18), done.

[root@axinlinux-01 data]# cd aming_linux/

[root@axinlinux-01 aming_linux]# ls

2.txt 3.txt linux.doc README.md

[root@axinlinux-01 aming_linux]# git branch #能夠看到咱們克隆下來的只有master這一個分支

* master

遠程分支

1.

[root@axinlinux-01 aming_linux]# git ls-remote origin #用命令行看遠程分支。也能夠去github上去看

b2a2250ef5e91caa96817e59dda897c28fd5e338 HEAD #這個不用管

b2a2250ef5e91caa96817e59dda897c28fd5e338 refs/heads/dev #這表明的就是兩個分支

b2a2250ef5e91caa96817e59dda897c28fd5e338 refs/heads/master

4.

[root@axinlinux-01 aming_linux]# git checkout -b dev origin/dev

分支 dev 設置爲跟蹤來自 origin 的遠程分支 dev。

切換到一個新分支 'dev'

[root@axinlinux-01 aming_linux]# git branch

* dev

master

[root@axinlinux-01 aming_linux]# vim sb.txt 咱們在dev分支上作一個更改

[root@axinlinux-01 aming_linux]# git add sb.txt

[root@axinlinux-01 aming_linux]# git commit -m "add sb.txt"

[root@axinlinux-01 aming_linux]# git push #記得要push一下才能到遠程

Username for 'https://github.com': axin-linux

Password for 'https://axin-linux@github.com':

Counting objects: 4, done.

Delta compression using up to 2 threads.

Compressing objects: 100% (2/2), done.

Writing objects: 100% (3/3), 265 bytes | 0 bytes/s, done.

Total 3 (delta 1), reused 0 (delta 0)

remote: Resolving deltas: 100% (1/1), completed with 1 local object.

To https://github.com/axin-linux/aming_linux.git

b2a2250..13aa9d9 dev -> dev #在這會顯示dev 到dev

[root@axinlinux-01 aming_linux]# git push origin dev #直推dev分支

Username for 'https://github.com': axin-linux

Password for 'https://axin-linux@github.com':

Everything up-to-date

[root@axinlinux-01 aming_linux]# git branch dev2 #咱們在本地增長一個新的分支dev2

[root@axinlinux-01 aming_linux]# git branch #查看一下

* dev

dev2

master

[root@axinlinux-01 aming_linux]# git checkout dev2 #切換到dev2

切換到分支 'dev2'

[root@axinlinux-01 aming_linux]# ls

2.txt 3.txt linux.doc README.md sb.txt

[root@axinlinux-01 aming_linux]# vim 1.txt #作個變動,增長一個文件

[root@axinlinux-01 aming_linux]# git add 1.txt

[root@axinlinux-01 aming_linux]# git commit -m "add 1.txt"

此時在遠程dev2這個分支是沒有的。咱們git push一下

[root@axinlinux-01 aming_linux]# git push #結果報錯了fatal

fatal: 當前分支 dev2 沒有對應的上游分支。

爲推送當前分支並創建與遠程上游的跟蹤,使用

 

git push --set-upstream origin dev2 #也提示了該怎麼作

 

[root@axinlinux-01 aming_linux]# git push origin dev2 #這個多是上面提示的縮寫

* [new branch] dev2 -> dev2 #直接看最下面這一行

回到github看一下,就能發現

 

 

 

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

 

 

 

22.11 標籤管理

 

 

標籤可理解爲相似分支的東西。在這個標籤裏一樣的也會有一個狀態,在這個狀態裏也會有當時的commit對應的一些代碼,以及對應代碼的一些內容、文件、目錄、等等

標籤相似於快照功能,能夠給版本庫打一個標籤,記錄某個時刻庫的狀態。也能夠隨時恢復到該狀態。

好比咱們今天對外發布了一個版本,打一個標籤好比爲1.0版本

對比分支,標籤完成後就不在動他了,至關因而靜態的

1.git checkout master 先切到master分支上

之後打標籤也是針對master來作。固然其餘的分支也是能夠打標籤的

2.git tag v1.0 給master打一個標籤v1.0

git tag #不加版本號可查看當前分支下有哪些標籤

3.git show v1.0 查看標籤信息

tag是針對commit來打標籤的,因此能夠針對歷史的commit來打tag

4.git log --pretty=oneline --abbrev-commit //先查看歷史的commit

#後面的--abbrev-commit是用簡寫的commit,能夠不用寫

5.git tag v0.9 46d3c1a //針對歷史commit打標籤

#版本號後面跟commit號

6.git tag -a v0.1 -m "first commit" 5aacaf4 //能夠對標籤進行描述

#建立v0.1版本的時候,對v0.1描述

7.git tag -d v0.8 //刪除標籤

8.git push origin v1.0 //推送指定標籤到遠程

#以上操做都是針對本地的,git push origin爲推送指定標籤到遠程

9.git push --tag origin //推送全部標籤

#以上操做都是針對本地的,git push --tag origin爲推送全部標籤到遠程

10.若是本地刪除了一個標籤,遠程也想要刪除須要這樣操做:

git tag v1.0 -d //刪除本地標籤

git push origin :refs/tags/v1.0 //刪除遠程標籤

 

 

 

實例:

1.

[root@axinlinux-01 aming_linux]# git checkout master

切換到分支 'master'

2.

[root@axinlinux-01 aming_linux]# git tag #查看當前分支

[root@axinlinux-01 aming_linux]# git tag v1.0 #當前分支打標籤爲v1.0

[root@axinlinux-01 aming_linux]# git tag #查看標籤

v1.0

3.

[root@axinlinux-01 aming_linux]# git show v1.0

commit b2a2250ef5e91caa96817e59dda897c28fd5e338 #打標籤是基於commit打的,後面跟的字符串就是對應的commit,也就是最新的。第4步查看commit可比較

Author: axin-linux <45262373+axin-linux@users.noreply.github.com>

Date: Sat Nov 24 22:06:18 2018 +0800

 

Create linux.doc

 

diff --git a/linux.doc b/linux.doc

new file mode 100644

index 0000000..30c7f6b

--- /dev/null

+++ b/linux.doc

@@ -0,0 +1,6 @@

+fewfe

+ewfwerfewrwe

+213123

+123123

+213123

+12312321

4.

[root@axinlinux-01 aming_linux]# git log --pretty=oneline

b2a2250ef5e91caa96817e59dda897c28fd5e338 Create linux.doc #這個就是最新的comit,也就說咱們上面默認的打的標籤

acb3a31bdd59dcf502658e6b0704d5b6cc202bf3 Update README.md

191c91566f4bf48af2e1ba8a9cbd03a334b0c100 Update 2.txt

63630b4f54a13a0f702e67475a0ececd70a9db88 add 3.txt

27e12499daf87e1ac1983813a9089b88873d95fd add 2.txt

25ca73993a55d6a079132188e19e622c8d775107 first commit

5.

[root@axinlinux-01 aming_linux]# git tag v0.8 191c91566f4b #歷史commit打v0.8標籤

[root@axinlinux-01 aming_linux]# git tag

v0.8

v1.0

6.

[root@axinlinux-01 aming_linux]# git tag -a v0.1 -m "first tag" 25ca739

[root@axinlinux-01 aming_linux]# git show v0.1 #show的時候能夠看到描述,此處不作展現了

8.

以上,遠程查看標籤

[root@axinlinux-01 aming_linux]# git push origin v1.0 #咱們將v1.0推上去

Username for 'https://github.com': axin-linux

Password for 'https://axin-linux@github.com':

Total 0 (delta 0), reused 0 (delta 0)

To https://github.com/axin-linux/aming_linux.git

* [new tag] v1.0 -> v1.0

再回到github上刷新一下:

 

 

10.

[root@axinlinux-01 aming_linux]# git tag -d v0.8 #刪除本地

已刪除 tag 'v0.8'(曾爲 191c915)

[root@axinlinux-01 aming_linux]# git push origin :refs/tags/v0.8 #刪除遠程

Username for 'https://github.com': axin-linux

Password for 'https://axin-linux@github.com':

To https://github.com/axin-linux/aming_linux.git

- [deleted] v0.8

 

 

 

 

 

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

 

 

 

 

22.12 git別名

 

 

 

1.git commit 這個命令是否是有點長? 用別名能夠提升咱們的工做效率

git config --global alias.ci commit

git config --global alias.co checkout

git config --global alias.br branch

2.查看git別名使用命令

git config --list |grep alias

#git config --list查看全部的配置

3.別名的配置文件:

/root/.gitconfig #可在這裏面直接加入別名(但最好用命令行的形式去寫)

4.查詢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"

#以上字段執行完,在執行git lg,這樣查詢到的日誌就會很漂亮,很直觀

5.取消別名

git config --global --unset alias.br

 

 

 

實例:

[root@axinlinux-01 data]# cd gitroot/

[root@axinlinux-01 gitroot]# ls

2.txt 3.txt

[root@axinlinux-01 gitroot]# git config --global alias.ci commit #建立commit別名爲ci

[root@axinlinux-01 gitroot]# vi 4.txt

[root@axinlinux-01 gitroot]# git add 4.txt

[root@axinlinux-01 gitroot]# git ci -m "alias 4.txt" #使用別名ci

[axin dee7175] alias 4.txt

1 file changed, 1 insertion(+)

create mode 100644 4.txt

[root@axinlinux-01 gitroot]# git config --global alias.br branch

[root@axinlinux-01 gitroot]# git br

* axin

master

[root@axinlinux-01 gitroot]# git config --global alias.co checkout

[root@axinlinux-01 gitroot]# git co master

[root@axinlinux-01 gitroot]# git config --list |grep alias

alias.ci=commit

alias.br=branch

alias.co=checkout

[root@axinlinux-01 gitroot]# git config --global --unset alias.br #取消br別名

[root@axinlinux-01 gitroot]# git br

git:'br' 不是一個 git 命令。參見 'git --help'。

 

您指的是這其中的某一個麼?

branch

var

相關文章
相關標籤/搜索