「GIT SourceTree衝突」解決方案

如今程序猿標配GIT做爲代碼管理,可是從SVN到GIT學習中,其中GIT的衝突是一個難點,經常會致使Push不上去,Pull不下來,很尷尬的地步,還不知道本身寫的代碼被覆蓋沒,廢話很少說,直接上乾貨!php


亮點

採用SourceTree插件BeyondCompare 可視化解決衝突git

方法

構造衝突

  • A 修改了conflict.file 中第1行內容而且提交到git上shell

  • B 這個時候也修改了confilct.file中第一行內容準備提交,這個時候git就會提示服務器

To git@192.168.x.xxx:xxx/server-aggregator.git
 ! [rejected]        develop -> develop (fetch first)
error: failed to push some refs to 'git@192.168.xx.xx:xxx/server-aggregator.git'

hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

提示遠程已經有更新了,本地版本過低,讓咱們先pull拉取最新的代碼。微信

  • 咱們pull一下,這個時候因爲本地有修改這個文件,就會在本地產生衝突文件app

配置外部比較工具

  • 下載Beyond Comparesvn

  • 打開SourceTree->工具->選項->比較->外部差別對比合並->選擇BeyondCompare工具

解決衝突

  • 在本地副本->右鍵->解決衝突->打開外部合併工具
    gitlab

  • 和svn同樣解決好衝突保存更改,退出便可

    學習

另一種狀況

  • 拉取時出現以下提示:

it -c diff.mnemonicprefix=false -c core.quotepath=false pull local-server-aggregator develop
/opt/gitlab/embedded/service/gitlab-shell/bin/gitlab-shell:3: warning: Insecure world writable dir /usr in PATH, mode 040777
From 192.168.0.200:weitoo/server-aggregator
 * branch            develop    -> FETCH_HEAD
Updating b0c5c94..40cef3b
error: Your local changes to the following files would be overwritten by merge:
    server/conflict.file
Please, commit your changes or stash them before you can merge.
Aborting

提示須要暫存本地修改,才能拉取服務器上新的代碼

  • 點擊貯存(英文版:Stash),隨便起一個名字,裏面存的都是距離上次服務器版本到本地修改之間的差別,千萬別刪掉了,合併成功無誤了再刪掉。

  • pull拉取服務器代碼,這個時候,本地的代碼變成了服務器上的代碼。

  • 點擊貯藏->應用貯藏區 ,這個時候是把以前的修改合併到本地上,這個時候會提示衝突。

git -c diff.mnemonicprefix=false -c core.quotepath=false stash apply stash@{0}
Auto-merging server/conflict.file
CONFLICT (content): Merge conflict in server/conflict.file

能夠在sourcetree裏看到有感嘆號,表明衝突文件,和上面解決衝突方法相似,可是稍微不一樣,最左邊成了遠程版本,中間爲遠程上一個版本,最後纔是本地修改。
這個是和咱們操做方式有關:咱們是先暫存本地修改,先拉取遠程代碼,這個時候local 就成了遠程代碼,最後咱們用暫存的合併進去,remote就成了本地修改

多餘的.orig文件

這個是因爲git自身形成的 它會解決衝突後 生成一個原來衝突的備份,咱們能夠去掉

git config --global mergetool.keepBackup false


感謝您的耐心閱讀,若是您發現文章中有一些沒表述清楚的,或者是不對的地方,請給我留言,你的鼓勵是做者寫做最大的動力,
若是您認爲本文質量不錯,讀後以爲收穫很大,不妨小額贊助我一下,讓我更有動力繼續寫出高質量的文章。

  • 支付寶

  • 微信

做 者 : @mousycoder

原文出處 : http://mousycoder.com/2015/10/14/git-source-conflict-reslove-solution/

創做時間:2015-6-15

更新時間:2015-10-16

相關文章
相關標籤/搜索