1. 程式人生 > >Web前端工程化之VSCode+Git 解決衝突和error

Web前端工程化之VSCode+Git 解決衝突和error

         多人協作開發使用版本控制難免會有衝突,在前端使用VSCode和Git過程中,就會遇到大大小小的衝突,有的merge一下,然後提交推送就可解決,有的是因為HEAD指標混亂造成,本地和遠端分支拉取/合併問題。

問題1、直接解決衝突


         出現這種情況的原因是,A、B兩個人同時操作了一個版本(HEAD)檔案,工具不知道選擇哪一個,這樣就會報衝突。


使用當前|使用傳入|

current program
<<<<<<< HEAD
b789
=======
b45678910
>>>>>>> 6853e5ff961e684d3a6c02d4d06183b5ff330dcc
incoming program



    出現以下衝突頁面後,在衝突程式碼上會有使用當前程式碼還是使用傳入程式碼的選項,分析程式碼,選擇留下有用的程式碼即可。

問題2、本地分支和遠端分支關聯的問題

        本地建立的分支或與遠端分支失聯的分支,pull程式碼或者提交程式碼就會報以下錯誤:



 
You asked me to pull without telling me which branch you
want to merge with, and 'branch.production.merge' in
your configuration file does not tell me, either. Please
specify which branch you want to use on the command line and
try again (e.g. 'git pull <repository> <refspec>').
See git-pull(1) for details.
 
If you often merge with the same branch, you may want to
use something like the following in your configuration file:
 
  [branch "debug"]
  remote = <nickname>
  merge = <remote-ref>
 
  [remote "<nickname>"]
  url = <url>
  fetch = <refspec>
 
See git-config(1) for details.




         本地分支和遠端分支沒有關聯的解決方法就是使用--set --upstream跟蹤遠端分支即可。

         我本地分支是local_branch 遠端分支是origin/local_branch

在終端使用以下命令:

         git branch --set --upstream origin/local_branch local_branch


正確的標識就是在左下角由雲圖標變成迴圈圖示



          現在本地和遠端分支已經關聯上,但是可能因為本地和遠端失聯太久,本地分支的HEAD已經關聯不上遠端的HEAD,本地pull程式碼也和遠端不一致,這樣就造成下面的問題:

問題3、Youhave not concluded your merge (MERGE_HEAD exists). Exiting because ofunfinished merge.

         你還沒有結束你的合併(MERGE_HEAD存在)。退出,因為未完成合並。本地沒有更新到最新程式碼,

解決方法有三個:

方法一:

git merge --abort
git reset --merge
git pull


這個方法可以解決的問題還有:error: Pulling is not possible because you have unmerged files.
代表意思分別為:中止合併-拉取的程式碼會回滾 ;重新進行合併;重新拉取程式碼,這種情況保留本地更改。





如果這幾個命令並沒有解決問題,那將就看第二個方法。開始方法二前,保證程式碼已經有備份,備份,備份;


方法二:
git fetch --all
git reset --hard origin/master
git fetch

代表意思分別為:從遠端獲取程式碼到本地-不會合並;捨棄本地,遠端程式碼覆蓋原生代碼,這時本地分支的HEAD會被重置成遠端分支的HEAD。慎重使用方法二,因為如果沒有備份程式碼會造成程式碼丟失。養成備份的好習慣是多麼重要。

方法三:

重新從github或碼雲上,clone一份程式碼,然後把本地修改的複製進去,這個方法適合修改內容不多的朋友。

總結:git解決衝突並不是沒有規律,看一看 .git目錄檔案,裡面的config檔案,裡面有記錄HEAD指向,一般衝突問題都出在這裡。

解釋:
1、HEAD簡單點可以看成提交到遠端倉庫時,前面的一串二進位制字串,例如


2、命令要使用雙斷線,例如git fetch --all 是兩個短線“- -”
參考:

【已解決】github中git push origin master出錯:error: failed to push some refs to

You have not concluded your merge (MERGE_HEAD exists)

祝好運^_^