Git 衝突等問題解決

Git衝突有以下兩種:

 

  • 智能自動合併

  1. 多成員修改不同文件

  2. 多成員修改相同文件不同區域

  3. 同時修改文件名和文件內容

上述三種方式都可以用同一中方式解決,也就是在執行push之前先進行pull操作

git pull
  • 用戶手動合併

  1. 文件合併(修改同一文件的同一區域)

“自動merge失敗,需要修復conflict後才能commit。”也就是此時已經出現了在上面“Git智能自動合併”的情形之外的情況,現在Git已經不能執行自動合併,此時需要用戶手動合併解決問題。
可以查看版本庫狀態:

這裏比較好的方式是藉助mergetool,輸入
git mergetool

 

選擇自己的difftool 和  mergetool

git difftool --tool-help

git mergetool --tool-help 

 

  • windows下difftool與mergetool的可視化工具配置

可以使用全局配置

# 全局.gitconfig中配置(即C盤用戶目錄下)

[diff]
  tool = tortoisediff
[difftool]
  prompt = false
[merge]
  tool = tortoisemerge
[mergetool]
  prompt = false
  keepBackup = false
[difftool "tortoisediff"]
  cmd = \""c:/APP/TortoiseGIT/bin/TortoiseGitIDiff.exe"\" -mine "$REMOTE" -base "$LOCAL"
[mergetool "tortoisemerge"]
  cmd = \""c:/APP/TortoiseGIT/bin/TortoiseGitMerge.exe"\" -base "$BASE" -theirs "$REMOTE" -mine "$LOCAL" -merged "$MERGED"

 

可以選擇使用Beyond Compare工具

#1. difftool 配置

git config --global diff.tool bc4
git config --global difftool.bc4.cmd "\"c:/program files (x86)/beyond compare 4/bcomp.exe\" \"$LOCAL\" \"$REMOTE\""

#2. mergeftool 配置

git config --global merge.tool bc4

git config --global mergetool.bc4.cmd  "\"c:/program files (x86)/beyond compare 4/bcomp.exe\" \"$LOCAL\" \"$REMOTE\" \"$BASE\" \"$MERGED\""

git config --global mergetool.bc4.trustExitCode true 

#3. 讓git mergetool不再生成備份文件(*.orig)

git config --global mergetool.keepBackup false

使用方法如下:

#比較當前修改情況
git difftool HEAD 

#merge使用方法
git mergetool

在可視化界面,處理完衝突之後進行提交 

git commit –m “”
git push origin master

 

2.樹合併(不同成員對同一文件重命名)

關於樹衝突,出現的原因是因爲同時對一個文件進行了重命名。也可以使用mergetool修復衝突,但是更直接的方法是直接使用git rm刪除想刪除的文件,使用git add將需要的文件加到暫存區進而commit。

在文件合併和樹合併中還有一個很有用的命令是:

git ls-files –s
  • 如何撤銷一個合併

可以在任何時間執行撤銷操作,並返回到開始合併之前的狀態

git merge --abort

當解決完衝突,並且在合併完成後發現一個錯誤,還是有機會來撤銷它。系統就會回滾到那個合併開始前的狀態

git reset --hard

 

  • 配置SSH

git 配置完SSH 以後,push 或者pull 的時候每次都提示Enter passphrase for key '/Users/m/.ssh/id_rsa': 

  • 1、終端輸入

    eval `ssh-agent`
    ssh-add


    但是關閉終端窗口,或者重新就必須重新輸入,治標不治本。

2、終端輸入

ssh-add -k /Users/m/.ssh/id_rsa
ssh-add -K privateKey 中privateKey 爲/Users/m/.ssh/id_rsa
  • Rebase

查看分支詳情

gitk -10 &

獲取分支信息,複製最近的commit id

git rebase -i ${commit_id}

修改 commit content

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章