日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

已经无法合并还报请合并git_GIT 分支管理:创建与合并分支、解决合并冲突

發(fā)布時間:2024/10/6 编程问答 83 豆豆
生活随笔 收集整理的這篇文章主要介紹了 已经无法合并还报请合并git_GIT 分支管理:创建与合并分支、解决合并冲突 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

分支就是科幻電影里面的平行宇宙,當你正在電腦前努力學習Git的時候,另一個你正在另一個平行宇宙里努力學習SVN。

如果兩個平行宇宙互不干擾,那對現(xiàn)在的你也沒啥影響。不過,在某個時間點,兩個平行宇宙合并了,結(jié)果,你既學會了Git又學會了SVN!

分支在實際中有什么用呢?假設(shè)你準備開發(fā)一個新功能,但是需要兩周才能完成,第一周你寫了50%的代碼,如果立刻提交,由于代碼還沒寫完,不完整的代碼庫會導致別人不能干活了。如果等代碼全部寫完再一次提交,又存在丟失每天進度的巨大風險。

現(xiàn)在有了分支,就不用怕了。你創(chuàng)建了一個屬于你自己的分支,別人看不到,還繼續(xù)在原來的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到開發(fā)完畢后,再一次性合并到原來的分支上,這樣,既安全,又不影響別人工作。

其他版本控制系統(tǒng)如SVN等都有分支管理,但是用過之后你會發(fā)現(xiàn),這些版本控制系統(tǒng)創(chuàng)建和切換分支比蝸牛還慢,簡直讓人無法忍受,結(jié)果分支功能成了擺設(shè),大家都不去用。

但Git的分支是與眾不同的,無論創(chuàng)建、切換和刪除分支,Git在1秒鐘之內(nèi)就能完成!無論你的版本庫是1個文件還是1萬個文件。

創(chuàng)建與合并分支

在版本回退里,你已經(jīng)知道,每次提交,Git都把它們串成一條時間線,這條時間線就是一個分支。截止到目前,只有一條時間線,在Git里,這個分支叫主分支,即master分支。HEAD嚴格來說不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是當前分支。

一開始的時候,master分支是一條線,Git用master指向最新的提交,再用HEAD指向master,就能確定當前分支,以及當前分支的提交點:

每次提交,master分支都會向前移動一步,這樣,隨著你不斷提交,master分支的線也越來越長:

當我們創(chuàng)建新的分支,例如dev時,Git新建了一個指針叫dev,指向master相同的提交,再把HEAD指向dev,就表示當前分支在dev上:

你看,Git創(chuàng)建一個分支很快,因為除了增加一個dev指針,改改HEAD的指向,工作區(qū)的文件都沒有任何變化!

不過,從現(xiàn)在開始,對工作區(qū)的修改和提交就是針對dev分支了,比如新提交一次后,dev指針往前移動一步,而master指針不變:

假如我們在dev上的工作完成了,就可以把dev合并到master上。Git怎么合并呢?最簡單的方法,就是直接把master指向dev的當前提交,就完成了合并:

所以Git合并分支也很快!就改改指針,工作區(qū)內(nèi)容也不變!

合并完分支后,甚至可以刪除dev分支。刪除dev分支就是把dev指針給刪掉,刪掉后,我們就剩下了一條master分支:

真是太神奇了,你看得出來有些提交是通過分支完成的嗎?

下面開始實戰(zhàn)。

首先,我們創(chuàng)建dev分支,然后切換到dev分支:

$ git checkout -b dev

Switched to a new branch'dev'

git checkout命令加上-b參數(shù)表示創(chuàng)建并切換,相當于以下兩條命令:

$ git branch dev

$ git checkout dev

Switched to branch'dev'

然后,用git branch命令查看當前分支:

$ git branch*dev

master

git branch命令會列出所有分支,當前分支前面會標一個*號。

然后,我們就可以在dev分支上正常提交,比如對readme.txt做個修改,加上一行:

create new branch dev..

然后提交:

$ git add readme.txt

$ git commit-m "create new branch...."[dev 45ae9a9] create new branch....1 file changed, 1 insertion(+)

現(xiàn)在,dev分支的工作完成,我們就可以切換回master分支:

$ git checkout master

Switched to branch'master'Your branch is up-to-date with 'origin/master'.

切換回master分支后,再查看一個readme.txt文件,剛才添加的內(nèi)容不見了!因為那個提交是在dev分支上,而master分支此刻的提交點并沒有變:

現(xiàn)在,我們把dev分支的工作成果合并到master分支上:

$ git merge dev

Updating 90bc1f7..45ae9a9

Fast-forward

readme.txt| 1 +

1 file changed, 1 insertion(+)

git merge命令用于合并指定分支到當前分支。合并后,再查看readme.txt的內(nèi)容,就可以看到,和dev分支的最新提交是完全一樣的。

注意到上面的Fast-forward信息,Git告訴我們,這次合并是“快進模式”,也就是直接把master指向dev的當前提交,所以合并速度非???。

當然,也不是每次合并都能Fast-forward,我們后面會講其他方式的合并。

合并完成后,就可以放心地刪除dev分支了:

$ git branch -d dev

Deleted branch dev (was 45ae9a9).

刪除后,查看branch,就只剩下master分支了:

$ git branch* master

因為創(chuàng)建、合并和刪除分支非常快,所以Git鼓勵你使用分支完成某個任務(wù),合并后再刪掉分支,這和直接在master分支上工作效果是一樣的,但過程更安全。

小結(jié)

Git鼓勵大量使用分支:

查看分支:git branch

創(chuàng)建分支:git branch

切換分支:git checkout

創(chuàng)建+切換分支:git checkout -b

合并某分支到當前分支:git merge

刪除分支:git branch -d

解決沖突

人生不如意之事十之八九,合并分支往往也不是一帆風順的。

準備新的feature1分支,繼續(xù)我們的新分支開發(fā):

$ git checkout -b feature1

Switched to a new branch'feature1'

修改readme.txt最后一行,改為:

create new branch feature1..

在feature1分支上提交:

$ git add readme.txt

$ git commit-m "create new branch feature1 first modify"[feature1 b4309b0] create new branch feature1 first modify1 file changed, 1 insertion(+)

切換到master分支:

$ git checkout master

Switched to branch'master'Your branch is ahead of'origin/master' by 1commit.

(use"git push" to publish your local commits)

Git還會自動提示我們當前master分支比遠程的master分支要超前1個提交。

在master分支上把readme.txt文件的最后一行改為:

goback master....

提交:

$ git add readme.txt

$ git commit-m "goback master first modify"[master 0b56936] goback master first modify1 file changed, 1 insertion(+)

現(xiàn)在,master分支和feature1分支各自都分別有新的提交,變成了這樣:

這種情況下,Git無法執(zhí)行“快速合并”,只能試圖把各自的修改合并起來,但這種合并就可能會有沖突,我們試試看:

$ git merge feature1

Auto-merging readme.txt

CONFLICT (content): Merge conflictinreadme.txt

Automatic merge failed; fix conflicts andthen commit the result.

果然沖突了!Git告訴我們,readme.txt文件存在沖突,必須手動解決沖突后再提交。git status也可以告訴我們沖突的文件:

$ git status

On branch master

Your branch is ahead of'origin/master' by 2commits.

(use"git push"to publish your local commits)

You have unmerged paths.

(fix conflicts and run"git commit")

Unmerged paths:

(use"git add ..."to mark resolution)

both modified: readme.txt

no changes added to commit (use"git add" and/or "git commit -a")

我們可以直接查看readme.txt的內(nèi)容:

test git modify second

study git

three add

four add modify

five add modify

six add modify

seven add modify

eight add modify ...

create new branch dev..<<<<<<

goback master....=======create new branch feature1..>>>>>>> feature1

Git用<<<<<<>>>>>>標記出不同分支的內(nèi)容,我們修改如下后保存:

test git modify second

study git

three add

four add modify

five add modify

six add modify

seven add modify

eight add modify ...

create new branch dev..

create new branch feature1..

goback master....

再提交:

$ git add readme.txt

$ git commit-m "fixed conflicts"[master 0f3d64a] fixed conflicts

現(xiàn)在,master分支和feature1分支變成了下圖所示:

用帶參數(shù)的git log也可以看到分支的合并情況:

$ git log --graph --pretty=oneline --abbrev-commit*0f3d64a fixed conflicts|\| *b4309b0 create new branch feature1 first modify* |0b56936 goback master first modify|/

*45ae9a9 create new branch....*90bc1f7 test name*c1bdf43 test commit*dd34c9a no add but commit,because use other parameter*4ed30d1 eight modify dify*b45ca96 eight modify*9332d40 seven modify*72c6f9b six modify*f64b5a0 five modify*de8fd65 four modify*83a4b1e three modify*01c05cf two modify*1acafa7 first modify* 09c1bba first git

最后,刪除feature1分支:

$ git branch -d feature1

Deleted branch feature1 (was b4309b0).

小結(jié)

當Git無法自動合并分支時,就必須首先解決沖突。解決沖突后,再提交,合并完成。

用git log --graph命令可以看到分支合并圖。

總結(jié)

以上是生活随笔為你收集整理的已经无法合并还报请合并git_GIT 分支管理:创建与合并分支、解决合并冲突的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。