Git 學習筆記<分支管理> (三)

來源:互聯網
上載者:User

標籤:style   使用   io   strong   檔案   for   ar   問題   

分支是什嗎?

分支就像樹分出的樹枝,不同的是,它們之間可以互相合并。

將版本的推進想象成一個鏈表的伸長:  version 1.0 ==》 version 2.0 ==》version3.0  。  

master是主要的分支基本上用於發布產品。你可以從master分出一個dev,在上面建立新功能,或者修bug然後調試。最後再合并到master裡面。就像下面這樣。

 

master分支:  version 1.0=========》version 2.0===...

                            \                            / (merge)

     dev分支:              \=version 1.5=/=========...

 

甚至還可以有更多分支


master分支:  version 1.0=========》version 2.0===...

          \                            / (merge)

    dev分支 :     \→→→O→→→→  O=========...

             \                     / (merge)

Hanson分支:       \ -> 修BUG ->/

 

分支不主動刪除是不會消失的。

(另外,目前的版本可以認為是一個指標指向鏈表最後一個節點,reset (第二章) 命令 就是把指標往前移,revert命令還是向後移。 )

 

如何管理分支?

 

1.建立與查看分支:

現在我們要建立一個名為dev的分支。(Dev在軟體開發中多用於開發軟體的代號,與Beta(測試版)的意思相近,其意思為"開發中的版本" 即development version或development edition etc。)建立分支的命令是 $git branch dev 移動到指定分支的命令是 $git checkout dev 

也有一個將兩個命令合起來的簡便方法:$git checkout -b dev  這樣就直接建立並轉到分支dev上。(相當於當前master版本的一個副本。)

在windows上的git bash上可以通過每行命令上面那行最後的括弧確定現在是哪個分支。在linux上沒有。

 

那如何查看當前有哪些分支和確定在哪條分支上呢?    輸入 :$git branch  ,會列出所有分支,分支前面的星號就是當前所在分支。

$git branch

*dev

  master

 

2.合并與刪除分支:

將工作區內容修改後 使用 $git add hello.txt  和 $git commit hello.txt -m "modify" 上傳就dev分支

然後 $git checkout master 切換到master分支後,輸入 $git merge dev 這樣dev就會融入master。

若是想刪除掉dev分支 輸入$ git branch -d dev 即可。(如果沒有合并就想要廢棄這條分支 需要使用$git branch -D dev)

 

在使用merge命令時,可以添加參數 -m "blabla" 也就是添加備忘。

還有一個參數是 --no-ff :

顧名思義 這個參數的意思是 不要FF模式。

FF 即 fast forward ,這種模式下,刪除分支後,會丟掉分支資訊。 就像這個分支從來沒存在過一樣。

而如果使用 --no-ff 就會我開頭舉的例子,Hanson分支被刪除後仍然存在於記錄中。會在merge時產生一個新的commit 。

這條命令會是這樣

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

另外還有一些原則需要遵守

master分支應該是非常穩定的,也就是僅用來發布新版本,平時不能在上面幹活;

那在哪幹活呢?幹活都在dev分支上,也就是說,dev分支是不穩定的,到某個時候,比如1.0版本發布時,再把dev分支合并到master上,在master分支發布1.0版本;

你和你的小夥伴們每個人都在dev分支上幹活,每個人都有自己的分支,時不時地往dev分支上合并就可以了。

或許你已經想到了這個問題 “要是合并的時候有衝突怎麼辦?”

 

比如兩個分支不約而同地修改了同一行。 在master上 你改了 hello.txt 最後一行,在dev上也改了hello.txt最後一行都提交上去了。

git是這樣做的:合并的時候git發現了這樣的衝突,它只好試圖將兩行合起來,並 提示你:

Auto-merging hello.txt

CONFLICT (content): Merge conflict in hello.txt

Automatic merge failed; fix conflicts and then commit the result.

你從這知道 需要你手動變更檔合并 然後提交。

輸入$git status 可以查看衝突的檔案

# On branch master# Your branch is ahead of ‘origin/master‘ by 1 commits.      (這一句是說當前的master超前遠程倉庫的master一個commit)## Unmerged paths:#   (use "git add/rm <file>..." as appropriate to mark resolution)##       both modified:      hello.txt#no changes added to commit (use "git add" and/or "git commit -a")

 開啟對應的 hello.txt 檔案 發現你分別修改的兩行是以這樣的形式存在在檔案中:

<<<<<<< HEAD………的……=======………地……>>>>>>> dev

這樣就標記了不同的分支中的內容 然後需要你手動更改並 $git add hello.txt 與commit -m 提交。

使用 $git log帶參數可以看到合并情況 關於參數以後再詳細記錄筆記。

$ git log --graph --pretty=oneline --abbrev-commit

 

3.臨時儲存工作現場

你常常會遇到這樣的情況,你正在自己的分支上做一個新功能,但是有一個BUG需要在一小時內解決。你不可能直接切換到一個新分支來修複bug,這樣你做了大半天的工作就沒了。也不可能在這個分支上修複提交,因為等你新功能寫完還得好久。

 

輸入 $ git stash save "work in progress for foo feature" (save命令是用於備忘,並非必須)吧 你會發現工作區變成了當前分支上次提交的樣子,這時候你就可以放心的建立分支修複BUG了。

修複之後,你想回到dev繼續工作了!

 

輸入 $git stash list 

下面就會顯示stash的列表,像這樣:[email protected]{0}: WIP on dev: ………… 

怎麼恢複呢?有兩個辦法:

一是用git stash apply恢複,但是恢複後,stash內容並不刪除,你需要用git stash drop來刪除,

預設是恢複最後一次儲存。如果你多次儲存,想恢複前面儲存的現場。就得根據stash list找到前面的標誌恢複,像這樣

git stash apply [email protected]{1}  ;

另一種方式是用$git stash pop,恢複的同時把stash內容也刪了,這種方法只能恢複最後一次stash。

 

$git stash clear  用於清除stash列表。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.