iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 27
0
自我挑戰組

30天教你學會Git系列 第 27

[Day27] 今天也來說一個很重要的狀況啊!

  • 分享至 

  • xImage
  •  
  • 我之前在講Megre的時候沒有提到一個很重要的觀念:Merge Conflict!!!
  • 我就是為了讓他在狀況出場的XD
  • 什麼是Merge Conflict呢?
    • 簡單來說就是,你在Merge的時候發生了一點衝突
    • 衝突的原因是因為兩個分支的同一個文件有一樣的東西被更改了!
    • 這邊很重要哦!並不是同一份檔案被更改就會有merge Conflict,而是同一份的同一行都被更改,這樣才會出問題!!
  • 我們來模擬一下情況吧!
$ ls
file.txt

$ cat file.txt
Hello World!

$ git checkout -b cat
Switched to a new branch 'cat'

  • 所以呢!我們現在分支cat上面以及master上都有一個檔案叫作Hello.txt,裡面的內容都是"Hello World!"
  • 接下來,我們在branch cat上,把內容更改成"Hello World from cat!
  • 在master上把文件修改成"Hello world from master!"
  • 記得都要git add .git commit哦!
$ vim Hello.txt

$ git add .

$ git commit -m "change on branch cat"
[cat af2b112] change on branch cat
 1 file changed, 2 insertions(+), 1 deletion(-)
 
$ git checkout master

$ vim Hello.txt

$ git add .

$ git commit -m "change on branch master"
[master d5f9a57] change on branch master
 1 file changed, 1 insertion(+), 1 deletion(-)
  • OK,我們現在已經模擬出來,在不同多分支上修改同一份檔案的同一個地方!
  • 我們現在來看看Merge的時候會發生什麼事情吧!
$ git merge cat
Auto-merging Hello.txt
CONFLICT (content): Merge conflict in Hello.txt
Automatic merge failed; fix conflicts and then commit the result.
  • 欸!真的噴出錯誤了!
  • 我們進去那份文件看一下吧~
$ cat Hello.txt
<<<<<<< HEAD
Hello World from master!
=======
Hello World from cat!

>>>>>>> cat

  • 怎麼變成奇怪的東西!!
  • 沒錯,Git會把你在不同分支上發生衝突的東西都列給你看!
  • 所以你可以在文件中修改成你想要的模樣!假設我們這邊是要保留master上的樣子好了!
$ vim Hello.txt

$ cat Hello.txt
Hello World from master!

$ git status
On branch master
Your branch is ahead of 'origin/master' by 8 commits.
  (use "git push" to publish your local commits)

You have unmerged paths.
  (fix conflicts and run "git commit")
  (use "git merge --abort" to abort the merge)

Unmerged paths:
  (use "git add <file>..." to mark resolution)

	both modified:   Hello.txt

no changes added to commit (use "git add" and/or "git commit -a")
  • 這裡面有一個both modifed的東西,熟悉的畫面對吧!!
$ git add .

$ git commit -m "Final version"
[master 52886cb] Final version

$ git merge cat
Already up to date.

$ git branch -d cat
Deleted branch cat (was af2b112).

  • 這樣各位應該懂要怎麼處理"Merge Conflict"了吧!

上一篇
[Day26] 之前的學生問了一個很棒的問題....
下一篇
[Day28] 欸!我不想Commit這個部分啊!
系列文
30天教你學會Git30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言