Git衝突有以下兩種:
-
智能自動合併
上述三種方式都可以用同一中方式解決,也就是在執行push之前先進行pull操作
git pull
-
用戶手動合併
- 文件合併(修改同一文件的同一區域)
“自動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