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

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