Git應用—05Git文件衝突合併的幾種狀況(轉載)

git文件衝突合併的幾種狀況

https://xieye.iteye.com/blog/2433229php

 

本文描述了git衝突的幾種常見狀況和解決方案,老鳥請直接忽略本文。
假設衝突文件是 test/TestCase.php
  下面分5種狀況討論。git


一、本地不變。
  而後遠程別人有更新。
  git pull
  這種最簡單,沒有衝突,本地工做區直接更新github


二、我本地修改,可是不add。
而後遠程別人有更新,此時 :   
git pull,
git會告訴你:
error: Your local changes to the following files would be overwritten by merge:
        tests/TestCase.php
  此時,我
   git checkout -- tests/TestCase.php
  千萬注意,上條命令會致使你本身的修改丟失了!!
  而後git pull.成功。
  這種狀況下,你本身的修改徹底丟失。本地接受了遠程的修改。ruby


三、我本地修改,可是已經add了
  而後別人遠程更新,
  git pull
  這種狀況,和上面幾乎同樣。
  git reset HEAD test/TestCase.php
  上面這條命令能夠理解爲add命令的逆命令。即,取消add操做。
  而後繼續
  git checkout -- tests/TestCase.php
  千萬注意,上條命令會致使你本身的修改丟失了!!
  而後git pull.成功。
  這種狀況下,你本身的修改徹底丟失。 本地接受了遠程的修改。fetch


四、我本地修改,add 且 commit了
  而後別人遠程更新,
  git pull
  注意:這種狀況和第2,第3種狀況不一樣。git會認爲你的commit也很重要。同等重要。
忽然發現,自動進入vi界面。
Merge branch 'master' of https://github.com/xxxx
這什麼意思呢?就是git會主動再幫你添加一個commit。
先讓你寫點註釋,而且它已經幫你寫了幾句話
那本身寫點東西,而後保存退出vi
請注意,這個commit是在本地的,尚未發到遠程。
這個commit會自動合併 你添加到代碼,和 別人遠程更新的代碼,
因此,以後請本身檢查一下這個代碼有無問題。
  若是都沒有問題,則你如今
  git push
  這個命令能夠把你的本地改動推送到遠程。
  push以後,遠程獲得你和他人的全部更新。push以前,僅本地獲得你和他人的全部更新。spa


五、使用分支功能。
  git的分支功能很強大,應該多使用。
  上面幾種狀況都沒有使用分支。使用分支會更好。
  1)首先,我本地新建並切換分支branch_1,本身起有意義名字,並修改文件。
  git checkout -b branch_1
  vi test/TestCase.php
  git add tests/TestCase.php
  git commit -m "change test"code


  2)如今,別人已經更新了遠程主分支代碼(沒更新就極其方便了,也沒必要說了,快速更新)
  我想把分支合併到主分支。
  我應該,先回到主分支,並更新。
  git  checkout master
  git pullregexp


  3)而後,在本地,把個人修改分支合併上去。
  git merge branch_1
  自動進入vi界面,讓你寫註釋。
  而後會合並好。orm


  4)相似提示:
  tests/TestCase.php | 3 ++-
  上面,兩個加號表示文件增長了兩行,一個減號表示文件減小了一行。
  此時,注意,凡是進入vi界面後,
  最好本身再檢查一下程序,檢查那些被提示修改過的文件,(這是一個好習慣,但我歷來不遵照)
  若是認爲正確,最後,blog


5) git push,推送到遠程。
  push以後,遠程獲得你和他人的全部更新。push以前,僅本地獲得你和他人的全部更新。
==========
總結,大部分狀況下,都推薦使用第5種,使用分支的方法,來管理文件修改衝突。

 

-----------------------------------------------------------------------------------------------------------------------------------

Git fetch和git pull的區別:

均可以從遠程獲取最新版本到本地

1.Git fetch:只是從遠程獲取最新版本到本地,不會merge(合併)

$:git fetch origin master //從遠程的origin的master主分支上獲取最新版本到origin/master分支上 $:git log -p master..origin/master //比較本地的master分支和origin/master分支的區別 $:git merge origin/master //合併

2.Git fetch:從遠程獲取最新版本並merge(合併)到本地

$:git pull origin master //至關於進行了 git fetch 和 git merge兩部操做

實際工做中,可能git fetch更好一些, 由於在merge前,能夠根據實際狀況決定是否merge


再說致使報錯:error: You have not concluded your merge (MERGE_HEAD exists).的緣由多是在之前pull下來的代碼自動合併失敗

解決辦法一:保留本地的更改,停止合併->從新合併->從新拉取

$:git merge --abort $:git reset --merge $:git pull

解決辦法二:捨棄本地代碼,遠端版本覆蓋本地版本(慎重)

$:git fetch --all $:git reset --hard origin/master $:git fetch
相關文章
相關標籤/搜索