GitHub 的分支建立與合併(筆記)

2021-07-28 03:49:59 字數 3207 閱讀 7200

乙個git倉庫可以維護很多開發分支。現在我們來建立乙個新的叫」experimental」的分支:

$ git branch experimental
如果你執行下面這條命令:

$ git branch
你會得到當前倉庫中存在的所有分支列表:

experimental

* master

「experimental」 分支是你剛才建立的,「master」分支是git系統預設建立的主分支。星號(「*」)標識了你當工作在哪個分支下,輸入:

$ git checkout experimental
切換到」experimental」分支,先編輯裡面的乙個檔案,再提交(commit)改動,最後切換回 「master」分支。

(edit file)

$ git commit -a

$ git checkout master

你現在可以看一下你原來在「experimental」分支下所作的修改還在不在;因為你現在切換回了「master」分支,所以原來那些修改就不存在了。

你現在可以在「master」分支下再作一些不同的修改:

(edit file)

$ git commit -a

這時,兩個分支就有了各自不同的修改(diverged);我們可以通過下面的命令來合併「experimental」和「master」兩個分支:

$ git merge experimental
如果這個兩個分支間的修改沒有衝突(conflict), 那麼合併就完成了。如有有衝突,輸入下面的命令就可以檢視當前有哪些檔案產生了衝突:

$ git diff
$ git commit -a
提交(commit)了合併的內容後就可檢視一下:

$ gitk
執行了gitk後會有乙個很漂亮的圖形的顯示專案的歷史。

這時你就可以刪除掉你的 「experimental」 分支了(如果願意):

$ git branch -d experimental
git branch -d只能刪除那些已經被當前分支的合併的分支. 如果你要強制刪除某個分支的話就用git branch –d;下面假設你要強制刪除乙個叫」crazy-idea」的分支:

$ git branch -d crazy-idea
分支是很輕量級且容易的,這樣就很容易來嘗試它。

如何合併

你可以用下面的命令來合併兩個分離的分支:git merge:

$ git merge branchname
這個命令把分支」branchname」合併到了當前分支裡面。如有衝突(衝突–同乙個檔案在遠端分支和本地分支裡按不同的方式被修改了);那麼命令的執行輸出就像下面一樣

$ git merge next

100% (4/4) done

auto-merged file.txt

conflict (content): merge conflict in

file.txt

automatic merge failed; fix conflicts and

then commit the

result.

在有問題的檔案上會有衝突標記,在你手動解決完衝突後就可以把此檔案添 加到索引(index)中去,用git commit命令來提交,就像平時修改了乙個檔案 一樣。

如果你用gitk來檢視commit的結果,你會看到它有兩個父分支:乙個指向當前 的分支,另外乙個指向剛才合併進來的分支。

解決合併中的衝突

如果執行自動合併沒有成功的話,git會在索引和工作樹里設定乙個特殊的狀態, 提示你如何解決合併中出現的衝突。

有衝突(conflicts)的檔案會儲存在索引中,除非你解決了問題了並且更新了索引,否則執行 git commit都會失敗:

$ git commit

file.txt: needs merge

如果執行 git status 會顯示這些檔案沒有合併(unmerged),這些有衝突的檔案裡面會新增像下面的衝突識別符號:

<<<<<<< head:file.txt

hello world

*****==

goodbye

>>>>>>> 77976da35a11db4580b80ae27e8d65caf5208086:file.txt

你所需要的做是就是編輯解決衝突,(接著把衝突識別符號刪掉),再執行下面的命令:

$ git add file.txt

$ git commit

注意:提交注釋裡已經有一些關於合併的資訊了,通常是用這些預設資訊,但是你可以新增一些你想要的注釋。

上面這些就是你要做乙個簡單合併所要知道的,但是git提供更多的一些資訊來 幫助解決衝突。

撒銷乙個合併

如果你覺得你合併後的狀態是一團亂麻,想把當前的修改都放棄,你可以用下面的命令回到合併之前的狀態:

$

gitreset--

hard

head

或者你已經把合併後的**提交,但還是想把它們撒銷:

$

gitreset--

hard

orig_head

但是剛才這條命令在某些情況會很危險,如果你把乙個已經被另乙個分支合併的分支給刪了,那麼 以後在合併相關的分支時會出錯。

快速向前合併

還有一種需要特殊對待的情況,在前面沒有提到。通常,乙個合併會產生乙個合併提交(commit), 把兩個父分支裡的每一行內容都合併進來。

但是,如果當前的分支和另乙個分支沒有內容上的差異,就是說當前分支的每乙個提交(commit)都已經存在另乙個分支裡了,git 就會執行乙個「快速向前」(fast forward)操作;git 不建立任何新的提交(commit),只是將當前分支指向合併進來的分支。

github 分支 合併

git如何進行分支管理?1 建立分支 建立分支很簡單 git branch 分支名 2 切換分支 git checkout 分支名 該語句和上乙個語句可以和起來用乙個語句表示 git checkout b 分支名 3 分支合併 比如,如果要將開發中的分支 develop 合併到穩定分支 master...

建立與合併分支

在版本回退裡,你已經知道,每次提交,git都把它們串成一條時間線,這條時間線就是乙個分支。截止到目前,只有一條時間線,在git裡,這個分支叫主分支,即master分支。head嚴格來說不是指向提交,而是指向master,master才是指向提交的,所以,head指向的就是當前分支。一開始的時候,ma...

建立與合併分支

在版本回退已經知道每次提交git 就把他們串成一條時間線,這條時間線就是乙個分支。截至到目前為止,只有一條時間線。在git裡這個分支就叫主分支,即master分支,head嚴格來講不止指向提交,而是指向master,master才是指向提交的,所以,head指向的就是當前分支。當我們建立新分支,例如...