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