git分支類似於某乙個模組,等到所有模組開發完畢時,最後聚合在一起形成乙個專案。而分支之間一般是不會受影響的。
git 分支的基本操作:
git branch branchname 表示建立分支,新建分支的命令是基於當前所在分支建立的,建立新分支的內容和當前所在分支的內容是完全一樣的。
git checkout branchname 表示切換到指定分支上。
git checkout -b branchname 表示建立分支並且切換到分支。
git merge branchname表示合併分支到主分支master。在執行這個操作的時候,要先切換到master分支,然後在執行該命令。
git branch 表示本地分支列表,git 預設是在master分支上的,當前分支前面會有乙個*號。
git branch -r 表示檢視遠端分支列表。
git branch -d branc_name 表示刪除本地分支。 git branch -d branch_name(強制刪除分支)。
git push origin :branch_name 表示刪除遠端分支。
把分支推送到遠端倉庫:git push origin branch_name ,如果想要給遠端分支取另乙個名稱的話:git push origin branch_name:branch_othername。
遠端有個分支,而本地沒有,將遠端分支遷到本地:git checkout branch_name origin/branch_name。同樣的,將遠端分支遷到本地並且切換到該分支:git checkout -b branch_name origin/branch_name。
merge和rebase
merge和rebase都有合併分支的作用,但是二者又有一些區別。
例如現在有乙個分支a,現在要把a分支合併到master分支,可以如下操作:
git checkout master
git merge a
先切換到master分支,在進行合併。
利用rebase也一樣能完成同樣的功能。
git checkout master
git rebase a
執行完畢也一樣完成了分支的合併。
他們的區別參見:
解決分支合併時的衝突
有時候分支在合併的時候會出現衝突,這個時候需要先解決衝突然後在合併。解決衝突就是手動編輯我們需要的內容。當不存在衝突時在合併即可。
當git無法自動合併分支時,就必須首先解決衝突。解決衝突後,再提交,合併完成。解決衝突就是把git合併失敗的檔案手動編輯為我們希望的內容,再提交。
git log --graph --pretty=oneline --abbrev-commit 可以檢視分支合併的情況。
通常一般在合併分支時git採用的是fast-forward模式,即快速合併分支,但這種模式下,刪除分支後,會丟掉分支資訊。
如果要強制禁用fast forward模式,git就會在merge時生成乙個新的commit,這樣,從分支歷史上就可以看出分支資訊。
git merge --no-ff -m "merge with no-ff" dev 注意:--on-ff表示禁用fast-forward模式,因為會生成乙個新的commit所以需要把描述資訊-m加上。
合併分支時,加上--no-ff引數就可以用普通模式合併,合併後的歷史有分支,能看出來曾經做過合併,而fast forward合併就看不出來曾經做過合併。
git的分支特別強大,一般master主分支都是比較穩定的,開發的話都是在dev分支上進行,當每乙個功能模組開發完成過後只需要將它合併到dev中即可,如果沒有問題了可以將dev合併到master分支上。
當需要緊急修復bug的時候,而你正在開發新的功能,功能還沒有開發完成,但是有bug需要立馬處理,這時怎麼辦呢? 別擔心,你只管切換分支到需要修改bug的分支去修復bug就好,其他的工作交給stash來完成。
多人協作時對遠端倉庫的操作
當你從遠端倉庫轉殖時,實際上git自動把本地的master分支和遠端的master分支對應起來了,並且,遠端倉庫的預設名稱是origin。
git remote 表示檢視遠端倉庫有哪些分支
git remote -v表示檢視遠端倉庫的詳細資訊,可以檢視遠端分支哪些可以抓取和推送的分支
fetch表示可以抓取的倉庫,push表示可以提交的倉庫。
git remote show origin 可以檢視遠端分支詳細資訊,比如當前在哪個分支,本地哪個分支和遠端分支進行了關聯等等。
git log --oneline --decorate 命令檢視各個分支當前所指的物件。
git branch 可以檢視當前的分支列表。
git branch -v 可以檢視每乙個分支的最後一次提交資訊。
--merged 與 --no-merged 這兩個有用的選項可以過濾這個列表中已經合併或尚未合併到當前分支的分支。 如果要檢視哪些分支已經合併到當前分支,可以執行 git branch --merged。
如果要同步你的工作,執行 git fetch origin 命令。 這個命令查詢 「origin」 是哪乙個伺服器(在本例中,它是 git.ourcompany.com),從中抓取本地沒有的資料,並且更新本地資料庫,移動 origin/master 指標指向新的、更新後的位置。
git push origin master 表示推送分支,將本地分支推送到遠端倉庫。如果需要推送其他分支,將master換成其他的即可,origin是表示遠端倉庫的名字。
git pull 表示將遠端倉庫抓取到本地
一般通常情況下,都是先pull在push。
多人協作的工作模式通常是這樣:
首先,可以試圖用git push origin
推送自己的修改;
如果推送失敗,則因為遠端分支比你的本地更新,需要先用git pull試圖合併;
如果合併有衝突,則解決衝突,並在本地提交;
沒有衝突或者解決掉衝突後,再用git push origin
推送就能成功!
如果git pull提示no tracking information,則說明本地分支和遠端分支的鏈結關係沒有建立,用命令git branch --set-upstream-to=origin/branchname
建立鏈結關係。
例如git branch --set-upstream-to=origin/dev dev,建立乙個dev分支並且和遠端dev分支建立連線關係。
關於分支衝突,以及分支的處理可以參見:
git的標籤相關操作
git中的標籤和分支差不多的,它也是指向的是某一次commit提交,標籤的好處就是可以讓你迅速回到某乙個版本,標籤也就是用來標記版本資訊的,例如當前版本是v1.0,那麼就在master上打乙個標籤。打標籤需要切換到對應的分支。預設的標籤是打在最近最新的一次commit上,如果某一次commit之後沒有打標籤,只需要通過日誌找到commit_id即可。
在git中標籤有兩種:輕量標籤和附註標籤。乙個輕量標籤很像乙個不會改變的分支 - 它只是乙個特定提交的引用。然而,附註標籤是儲存在 git 資料庫中的乙個完整物件。 它們是可以被校驗的;其中包含打標籤者的名字、電子郵件位址、日期時間;還有乙個標籤資訊;並且可以使用 gnu privacy guard (gpg)簽名與驗證。 通常建議建立附註標籤,這樣你可以擁有以上所有資訊;但是如果你只是想用乙個臨時的標籤,或者因為某些原因不想要儲存那些資訊,輕量標籤也是可用的。
git tag tag_name 表示建立乙個標籤,標籤總是指向乙個commit(這樣建立的標籤就是輕量標籤)。
還可以建立帶有說明的標籤,用-a指定標籤名,-m指定說明文字。例如:git tag -a tag_name -m"說明文字" |commit_id。(這樣建立的標籤就是附註標籤)
git show tag_name可以檢視標籤的一些資訊。
要切換到某個標籤,可以使用 git checkout 標籤名。
直接使用git tag表示檢視倉庫的標籤資訊。
對指定某一次提交打標籤git tag tag_name commit_id。即可。
需要注意的是標籤不是按時間順序列出,而是按字母排序的。可以用git show 檢視標籤資訊。如果沒有標籤資訊就是檢視最近的一次提交資訊。
git tag -d tag_name 表示刪除某乙個標籤。
git push origin 表示推送某個標籤到遠端。
git push origin --tags 表示一次推送所有未推送的標籤到遠端。
如果想刪除遠端標籤,需要先刪除本地標籤然後在刪除遠端標籤。
git tag -d tag_name
git push origin :refs/tags/tag_name
以上就是git 分支和標籤的基本操作
git操作分支
你也許會有疑惑,為什麼需要建立分支呢,只在主幹線上進行開發不是挺好的嗎?沒錯,通常情況下,只在主幹線上進行開發是完全沒有問題的,不過一旦涉及到出版本的情況,如果不建立分支的話,你就會非常地頭疼。舉個簡單的例子吧,比如說你們公司研發了一款不錯的軟體,最近剛剛完成,並推出了1.0版本。但是領導是不會讓你...
git分支操作
檢視分支git branch v新建分支git branch new branch切換分支git checkout new branch新建分支並切換過去git checkout b new branch在某分支上新建分支git checkout b new branch old branch重新命...
Git分支操作
1.建立本地分支 git branch 分支名,例如 git branch 2.0.1.20120806 注 2.0.1.20120806是分支名稱,可以隨便定義。2.切換本地分支 git checkout 分支名,例如從master切換到分支 git checkout 2.0.1.20120806...