1、分支管理linux
# cd /data/gitroot # git branch //查看當前倉庫的分支 * master //這兒只有一行,*號當前所在的分支是哪一個 # git branch aming //建立分支,名字叫aming # git branch aming * master
//*號還在master,說明還在maser分支上git
# 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
分支是相互隔離開的,分支與分支之間操做文件是互相不受影響的。vim
分支合併bash
aming分支作了變動,master分支沒有作,如今想讓兩個分支變化是同樣的,能夠用合併分支。把aming分支合併到master分支上去,這兩個分支就保持一致了。 ide
# git checkout master //合併分支以前,先切換到目標分支 # git merge aming //把aming分支裏的變動合併到master裏來。
若是master分支和aming分支都對2.txt進行了編輯,當合並時會提示衝突,須要先解決衝突才能繼續合併。ui
解決衝突的方法是在master分支下,編輯2.txt,改成aming分支裏面2.txt的內容。 而後提交2.txt,再合併aming分支。spa
可是這樣有一個問題,萬一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 //刪除分支。若是正在當前分支下,則沒法刪除當前分支,切換到另外一個分支便可。3d
若是分支沒有合併,刪除以前會提示,那就不合並,強制刪除:orm
# git branch -D aming
2、遠程分支管理
使用分支的原則
對於分支的應用,建議以這樣的原則來:
master分支是很是重要的,線上發佈代碼用這個分支,平時咱們開發代碼不要在這個分支上。
建立一個dev分支,專門用做開發,只有當發佈到線上以前,纔會把dev分支合併到master
開發人員應該在dev的基礎上再分支成我的分支,我的分支(在本身pc上)裏面開發代碼,而後合併到dev分支。
dev分支合併bob分支的命令是:
# git checkout dev //先切換到dev分支,而後 # git merge bob
遠程分支
本地新建的分支若是不推送到遠程,對其餘人就是不可見的。
常識:git clone只能克隆一個master的分支。
建立一個新文件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是沒有的。
3、標籤管理
標籤相似於快照功能,能夠給版本庫打一個標籤,記錄某個時刻庫的狀態。也能夠隨時恢復到該狀態。
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方法,在切換分支的選項裏:
git push origin v1.0 //推送指定標籤到遠程
git push --tag origin //推送全部標籤
若是本地刪除了一個標籤,遠程也想要刪除須要這樣操做:
git tag v0.8 -d //刪除本地標籤
git push origin :refs/tags/v0.8 //刪除遠程標籤
4、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