三、分支管理、遠程分支管理、標籤管理、git別名

一、分支管理

# cd /data/gitroot
# git branch   //查看當前倉庫的分支
* master        //這兒只有一行,*號當前所在的分支是哪個
# git branch aming     //創建分支,名字叫aming
# git branch 
  aming
* master

//*號還在master,說明還在maser分支上

# git checkout aming   //git checkout,切換分支
切換到分支 'aming'
# git branch   //再查看分支,*號已經到了aming了
* aming
  master
# ls   //當前分支和master裏的文件是一樣的
1.txt
# vim 2.txt    //在aming分支下寫一個新的文件
# git add .
# git commit -m "add 2.txt"   //要把變更搞到版本庫裏去,只需要git commit就可以了。
[root@MRX gitroot]# ls
1.txt  2.txt
[root@MRX gitroot]# git checkout master 
切換到分支 'master'
[root@MRX gitroot]# ls   //切換到master下查看是沒有2.txt的
1.txt

分支是相互隔離開的,分支與分支之間操作文件是互相不受影響的。


分支合併

aming分支做了變更,master分支沒有做,現在想讓兩個分支變化是一樣的,可以用合併分支。把aming分支合併到master分支上去,這兩個分支就保持一致了。

# git checkout master   //合併分支之前,先切換到目標分支
# 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後面跟的分支名字一定是最新的分支。掌握這個原則,就不會出錯。

# git branch
  aming
* master
[root@MRX gitroot]# vim 2.txt   //master分支下的2.txt增加了幾行
uipad
uviadp
euqpvan
4989496
hgiasd
iahusdf
# git add 2.txt
# git commit -m "ch 2.txt"
# git checkout aming
# vim 2.txt    //aming分支下的2.txt刪除了幾行
uipad
uviadp
euqpvan
# git add 2.txt
# git commit -m "ch 2.txt"
# git checkout master
# git merge aming 
自動合併 2.txt
衝突(內容):合併衝突於 2.txt
自動合併失敗,修正衝突然後提交修正的結果。
# cat 2.txt    //此時2.txt裏不同部分的內容會自動被標記出來。
uipad
uviadp
euqpvan
<<<<<<< HEAD
4989496
hgiasd
iahusdf
=======
>>>>>>> aming
[root@MRX gitroot]# vim 2.txt 
uipad
uviadp
euqpvan
# git checkout aming
2.txt: needs merge
error: 您需要先解決當前索引的衝突
//這裏又一個問題,當你合併有衝突時,你不能切換到另一個分支下去。所以儘量避免發生合併衝突
# git add 2.txt
# git commit -m "ch 2.txt"
# git checkout aming
切換到分支 'aming'
# git merge aming   //兩個分支內容保持一致了,再來合併就不會產生任何變化。
Already up-to-date.

# git branch -d aming //刪除分支。如果正在當前分支下,則無法刪除當前分支,切換到另一個分支即可。

如果分支沒有合併,刪除之前會提示,那就不合並,強制刪除:

# git branch -D aming


二、遠程分支管理

使用分支的原則

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

master分支是非常重要的,線上發佈代碼用這個分支,平時我們開發代碼不要在這個分支上。

創建一個dev分支,專門用作開發,只有當發佈到線上之前,纔會把dev分支合併到master

開發人員應該在dev的基礎上再分支成個人分支,個人分支(在自己pc上)裏面開發代碼,然後合併到dev分支。

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

# git checkout dev   //先切換到dev分支,然後
# git merge bob


遠程分支

本地新建的分支如果不推送到遠程,對其他人就是不可見的。

常識:git clone只能克隆一個master的分支。

1.png

創建一個新文件linux.doc和一個新分支dev。

創建分支成功後,再次點擊,可以看到對勾在dev的前面,這裏可以選擇更換分支。

再回到命令行下查看分支,先將這個項目克隆,可以發現只有一個master分支。

查看遠程分支 git ls-remote origin,可以看到所有分支。

# git ls-remote origin
45337b0d65a36760796a0f3a45e3f90e1d38ed4e	HEAD
41b9784a6f7aeecb1d485e956b10232b5114592a	refs/heads/dev
45337b0d65a36760796a0f3a45e3f90e1d38ed4e	refs/heads/master


對於git push分支分兩種情況

當本地分支和遠程分支一致時,git push會把所有本地分支的變更一同推送到遠程,比如master和dev。

如果想只推送一個分支,使用git push origin branch-name。

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

git clone的時候默認只把master分支克隆下來,如果想把所有分支都克隆下來,需要手動創建,在本地創建和遠程分支對應的分支,使用git checkout -b branch-name origin/branch-name,本地和遠程分支的名稱要一致。這裏的兩個branch-name指遠程分支的名字。

# git checkout -b dev origin/dev
分支 dev 設置爲跟蹤來自 origin 的遠程分支 dev。
切換到一個新分支 'dev'
# vim 4.txt
# git add 4.txt
# git commit -m "add 4.txt"
# git push
0b51fcb..43fd64d  dev -> dev   //git push後,最後一行可以看到從dev推送到了dev。
再到遠程上刷新,可以看到dev分支下出現了4.txt,而master是沒有的。


三、標籤管理

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

git checkout master 先切換到master分支上,以後打標籤也是針對master分支來做。
 git tag v1.0  給master打一個標籤v1.0
 git show v1.0 查看標籤信息
 git tag  查看當前分支下所有的標籤
 tag是針對commit來打標籤的,所以可以針對歷史的commit來打tag,v1.0是對最新的版本打的標籤。
 git log --pretty=oneline --abbrev-commit  //先查看歷史的commit,這裏後面的選項指用簡寫的commit。
 git tag v0.9 46d3c1a  //針對歷史commit打標籤
 git tag -a v0.1 -m "first tag" 2ec587f  //可以對標籤進行描述
# git show v0.1
tag v0.1
Tagger: aming 
Date:   Thu Sep 19 11:06:29 2019 +0800

first tag   //查看標籤信息可以看到描述

commit 2ec587ff6e9e0e4c67aefb84e02b2b73693d633e
Author: aming 
Date:   Sun Sep 8 14:59:15 2019 +0800

    first commit

diff --git a/README.md b/README.md
new file mode 100644
index 0000000..6f0cbde
--- /dev/null
+++ b/README.md
@@ -0,0 +1 @@
+# apelearn

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

前面的操作都是在客戶端,還沒有推送到遠程服務端。

查看遠程上的tags方法,在切換分支的選項裏:

2.png

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

git push --tag origin   //推送所有標籤

如果本地刪除了一個標籤,遠程也想要刪除需要這樣操作:

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

git push origin :refs/tags/v0.8   //刪除遠程標籤


四、git別名

git commit 這個命令可以用別名表示,用別名可以提高我們的工作效率。
格式:
 git config --global alias.別名  命令名
 git config --global alias.ci commit
 git config --global alias.co checkout
 git config --global alias.br branch
 這些別名的配置都在/root/.gitconfig文件中,可以在文件內進行更改。
 
 查看git別名使用命令
 git config --list |grep alias
 查詢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   //可以看到用戶,時間,描述和tag。
* 45337b0 - (HEAD, tag: v1.0, origin/master, origin/HEAD, master) add 3.txt (6 天之前) 
* 41b9784 - Create linux.doc (7 天之前) 
* d816b47 - add 1.txt (13 天之前) 
* 0c8b170 - add 2.txt (13 天之前) 
* 2ec587f - first commit (13 天之前) 
  取消別名
 git config --global --unset alias.br



總結:

分支管理

git branch  查看分支

git checkout master  切換分支

git merge aming  把aming分支裏的變更合併到master裏來

git branch -d aming  刪除分支

git branch -D aming  強制刪除分支


遠程分支管理

git ls-remote origin  查看遠程分支

git push origin branch-name  推送單個分支

在本地創建和遠程分支對應的分支,使用git checkout -b branch-name origin/branch-name


標籤管理

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

git show v1.0  查看標籤信息

git tag  查看所有標籤

git log --pretty=oneline --abbrev-commit  查看歷史的commit

git tag -a v1.0 -m "first tag" 2ec587f  對標籤做描述

git tag -d v0.8  刪除標籤

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

git push --tag origin   推送所有標籤

git tag v0.8 -d    刪除本地標籤

git push origin :refs/tags/v0.8   刪除遠程標籤


git別名

git config --global alias.別名  命令名

git config --list |grep alias  查看別名

git config --global --unset alias.br

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章