假设在运行git stash pop
时,得到一条CONFLICT
消息(由失败的自动合并尝试产生)。如何解决所有合并冲突以支持刚刚弹出的存储?
是否有快速告诉git
解决全部有利于刚才弹出的存储的冲突?
编辑:我只写了下面的脚本来测试两个提议的替代方案。它
- 在目录
/tmp/$1
和cd
s创建一个新的git回购; - 创建文件的第一个版本并提交它;
- 对文件进行一些更改并存储文件;
- 对文件进行其他更改(包括冲突和非冲突更改)并提交这些更改;最后
- 弹出藏匿
此设置阶段为两种相比较提出的方法。这里的脚本:
shopt -s expand_aliases
alias gcommit='git commit -q --allow-empty-message -m ""'
alias gmerge='git merge -q --no-edit'
TESTDIR=/tmp/$1
rm -rf "$TESTDIR"
mkdir -p "$TESTDIR"
cd "$TESTDIR"
git init -q
touch chiasmus.txt
git add . && gcommit
cat <<EOF > chiasmus.txt
ask
what
...
EOF
gcommit -a
cat <<EOF > chiasmus.txt
ask
not
what
your country can do for you
...
EOF
git stash -q
cat <<EOF > chiasmus.txt
quote:
ask
what
you can do for your country
...
jfk
EOF
gcommit -a
git stash pop -q
然后我跑
% bash gittest.sh checkout
% bash gittest.sh merge
% cd /tmp/checkout
% git checkout --theirs $(git diff --name-only --diff-filter=U)
% cd /tmp/merge
% git reset -q --hard
% git merge -q --no-edit --squash -Xtheirs stash
Auto-merging chiasmus.txt
Squash commit -- not updating HEAD
Automatic merge went well; stopped before committing as requested
% diff /tmp/{checkout,merge}/chiasmus.txt
0a1
> quote:
5a7
> jfk
因此,它看起来像“结账”选项并失去了冲突的变更。然而,事实上,这个选项更贴近我之后的情况,也就是说,git pop
的行为与我期望的更接近:回到我跑到git stash
期间的时间段。没有自动合并等(IOW,我的问题,如问,果然没有准确地反映了我之后就好像meagar莫名其妙地了解我的想法。)
你有git配置使用像KDiff3合并工具? – 2013-05-08 20:47:53