您好,登錄后才能下訂單哦!
一、分支管理
#?cd?/data/gitroot #?git?branch???//查看當前倉庫的分支 *?master????????//這兒只有一行,*號當前所在的分支是哪個 #?git?branch?aming?????//創(chuàng)建分支,名字叫aming #?git?branch? ??aming *?master
//*號還在master,說明還在maser分支上
#?git?checkout?aming???//git?checkout,切換分支 切換到分支?'aming' #?git?branch???//再查看分支,*號已經(jīng)到了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分支沒有做,現(xiàn)在想讓兩個分支變化是一樣的,可以用合并分支。把aming分支合并到master分支上去,這兩個分支就保持一致了。
#?git?checkout?master???//合并分支之前,先切換到目標分支 #?git?merge?aming???//把aming分支里的變更合并到master里來。
如果master分支和aming分支都對2.txt進行了編輯,當合并時會提示沖突,需要先解決沖突才能繼續(xù)合并。
解決沖突的方法是在master分支下,編輯2.txt,改為aming分支里面2.txt的內(nèi)容。 然后提交2.txt,再合并aming分支。
但是這樣有一個問題,萬一master分支更改的內(nèi)容是我們想要的呢? 可以編輯2.txt內(nèi)容,改為想要的,然后提交。切換到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 沖突(內(nèi)容):合并沖突于?2.txt 自動合并失敗,修正沖突然后提交修正的結(jié)果。 #?cat?2.txt????//此時2.txt里不同部分的內(nèi)容會自動被標記出來。 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:?您需要先解決當前索引的沖突 //這里又一個問題,當你合并有沖突時,你不能切換到另一個分支下去。所以盡量避免發(fā)生合并沖突 #?git?add?2.txt #?git?commit?-m?"ch?2.txt" #?git?checkout?aming 切換到分支?'aming' #?git?merge?aming???//兩個分支內(nèi)容保持一致了,再來合并就不會產(chǎn)生任何變化。 Already?up-to-date.
# git branch -d aming //刪除分支。如果正在當前分支下,則無法刪除當前分支,切換到另一個分支即可。
如果分支沒有合并,刪除之前會提示,那就不合并,強制刪除:
# git branch -D aming
二、遠程分支管理
使用分支的原則
對于分支的應用,建議以這樣的原則來:
master分支是非常重要的,線上發(fā)布代碼用這個分支,平時我們開發(fā)代碼不要在這個分支上。
創(chuàng)建一個dev分支,專門用作開發(fā),只有當發(fā)布到線上之前,才會把dev分支合并到master
開發(fā)人員應該在dev的基礎上再分支成個人分支,個人分支(在自己pc上)里面開發(fā)代碼,然后合并到dev分支。
dev分支合并bob分支的命令是:
#?git?checkout?dev???//先切換到dev分支,然后 #?git?merge?bob
遠程分支
本地新建的分支如果不推送到遠程,對其他人就是不可見的。
常識:git clone只能克隆一個master的分支。
創(chuàng)建一個新文件linux.doc和一個新分支dev。
創(chuàng)建分支成功后,再次點擊,可以看到對勾在dev的前面,這里可以選擇更換分支。
再回到命令行下查看分支,先將這個項目克隆,可以發(fā)現(xiàn)只有一個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分支克隆下來,如果想把所有分支都克隆下來,需要手動創(chuàng)建,在本地創(chuàng)建和遠程分支對應的分支,使用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分支下出現(xiàn)了4.txt,而master是沒有的。
三、標簽管理
標簽類似于快照功能,可以給版本庫打一個標簽,記錄某個時刻庫的狀態(tài)。也可以隨時恢復到該狀態(tài)。
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 ? //刪除遠程標簽
四、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文件中,可以在文件內(nèi)進行更改。 ? ?查看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
總結(jié):
分支管理
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 ?推送單個分支
在本地創(chuàng)建和遠程分支對應的分支,使用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
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。