git分支

分支是一個指向提交點的指針
head是指向當前的分支的,head指針指向了誰就代表哪個分支是當前分支
查看提交了多少版本

git logs #當前分支所指向的提交點(包括指向的提交點)之後的提交點並且在一條提交線上的詳細信息
git log --pretty=oneline#只看到commit id和描述

什麼是一條線呢?
舉個例子,A分支指向了一個提交點1,然後創建了B分支並切換到B分支,這時A和B分支都指向同一提交點1,修改工作區文件後 ,再進行提交,這時產生了一個新提交點2,B分支也指向了這個提交點2。在B分支上可以使用git log 發現提交點1和提交點2。這兩個提交點就是在一條線上的。一條線上可以使用快速合併模式。
這時,我們回到A分支git checkout A ,使用git log,只能看到提交點1,因爲提交點2在A分支所指向的提交點的前面。這時,再commit一次,A分支指向了提交點3,我們使用git log 查看提交點3和提交點1是一條線的。再回到時B分支,看不到提交點3,因爲不在一條線上。不同線之前的合併,就會產生衝突。

回退到上一個版本,把分支往後移一位提交點或者指定提交點

git reset --hard [HEAD^|commit_id]

查看命令歷史中的commit_id,以便未來要回到哪個版本

git reflog

二、分支合併(快速合併)
分支就是一個指向提交點的一個指針,head指針指向的是分支。
//先創建一個分支,也就是先提交一次,產生master分支先
創建dev分支(新創建的分支默認和當前所在的分支指向同一提交點),然後切換到dev分支

git checkout -b dev
#相當於以下兩條命令
git branch dev
git checkout dev

查看當前分支狀態

git branch

在dev分支上提交

git commit -m "dev branch test"

回到master分支上,此時head指向了master,這時你發現你的工作區中的文件沒有提交

 git checkout master

把master合併到dev,也就是把master指針指向了dev所指向的提交點,這個就叫快速合併,此時兩個分支指向的都是同一個提交點。

git merge dev

或者執行以下這句,上面是Fast forward模式(改變分支所指向的提交,前提是要在一條線上),不會產生新的提交,這句話會產生新的提交。

git merge --no-ff -m "merge with no-ff" dev

刪除掉dev

git branch -d dev

Git鼓勵大量使用分支:

查看分支:git branch

創建分支:git branch

切換分支:git checkout

創建+切換分支:git checkout -b

合併某分支到當前分支:git merge | git merge –no-ff -m “merge with no-ff” dev

刪除分支:git branch -d
三、解決衝突
上面的合併其實是在一條線上的,dev指向的提交點比master前,所以沒有衝突。但是,如果兩個分支不在一條線上。此時如果合併且文本內容不一樣就會產生衝突。需要手動解決衝突(兩個分支所指向的提交點的文件異同,你當前的提交點文件會被改變)後再提交。此時提交產生的提交點位於兩條線上最前端。

git merge name

這裏寫圖片描述
用git status可以查看衝突文件
四、普通合併
當前分支和dev分支進行合併--no-ff 代表使用普通合併,則會產生新的提交點

git merge --no-ff -m 'merge with no-ff' dev

四、bug分支
有個場景你在dev分支上進行開發,些時線上有bug要進行修改,你需要到master分支上進行修改bug,可是你的任務沒有完成,你不想提交。此時工作區己經被修改了。這時如果切換到了master分支上,你的工作區文件並不是master分支上所對應的文件。文件都不是master上的文件還改毛bug改啊。
這時就可以使用git stash ,再用git status 查看後,發現你的工作區是乾淨的。
再回到git checkout master,新建一個bug分支git checkout -b issue-101,bug修改完後commit,再回到master上進行合併,最後刪除掉bug分支git branch -d issue-101
好了bug解決了我們繼續回到dev分支上幹活了。

git checkout dev
git stash pop #恢復在dev分支上的git stash工作區

五、分支強制刪除
一般來說開發一個新功能,要建立一個新的分支,開發完成後進行提交合並。

git checkout -b feature-v1
git add -A
git commit -m 'add v1'
git checkout dev
//準備合併
# git merge feature-v1

但功能由於某些原因要取消

git branch -d feature-v1#這個刪不掉
git branch -D feature-v1#強力刪除
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章