以前用svn管理代码,图形界面使用TortoiseSVN,svn update出现冲突时,在log窗口点击右键就可以直接选择“以自己的为准”或“以仓库的为准”。

切换到git后,苦于没有好用的图形工具(SmartGit还凑合),一直使用命令行,更新代码出现冲突时,没有上述两个选项,感觉很不习惯,于是自己写了两个小函数来实现上述功能。

加入到~/.bash_profile就可以愉快的使用了,Windows,Linux都可以。

function resolve_conflict_using_mine {
    git status --porcelain | egrep '^UU' | cut -d ' ' -f 2 | xargs git checkout --theirs
    git add -A
    git rebase --continue
}

function resolve_conflict_using_theirs {
    git status --porcelain | egrep '^UU' | cut -d ' ' -f 2 | xargs git checkout --ours
    git add -A
    git rebase --continue
}

 

遇到冲突时,敲resolve_conflict_using_mine就可以“以自己的为准”解决冲突,反之敲resolve_conflict_using_theirs可以“以仓库的为准”解决冲突。

 

当然,用“自己的”,“仓库的”来描述git模型并不准确。明白就好~

 

上面两个函数是不是看着有点奇怪,ours和theirs感觉反了?

因为我习惯使用rebase而不是merge,全局配置了pull.rebase=true,所以ours和theirs是反的。

git help checkout 查看文档,可以看到有以下描述:

Note that during git rebase and git pull --rebase, ours and theirs may appear swapped; --ours gives the version from the branch the changes are rebased onto, while --theirs gives the version from the branch that holds your work that is being rebased.

使用merge而不是rebase的同学,可以使用下面的函数。

function resolve_conflict_using_mine {
    git status --porcelain | egrep '^UU' | cut -d ' ' -f 2 | xargs git checkout --ours
    git add -A
    git merge --continue
}

function resolve_conflict_using_theirs {
    git status --porcelain | egrep '^UU' | cut -d ' ' -f 2 | xargs git checkout --theirs
    git add -A
    git merge --continue
}

 

转载于:https://www.cnblogs.com/parody/p/9935463.html

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐