假设在运行时git stash pop
,收到一条CONFLICT
消息(由于自动合并尝试失败)。
有没有一种快速的方法来git
解决所有冲突以支持刚刚弹出的存储?
编辑:我刚刚编写了以下脚本来测试提出的两种替代方案。它
- 在目录中创建一个新的 git 存储库
/tmp/$1
,并cd
s 到它; - 创建文件的第一个版本并提交它;
- 对文件进行一些更改并存储文件;
- 对文件进行其他更改(包括冲突和非冲突更改),并提交这些更改;最后
- 弹出藏匿处
这为比较两种提议的方法奠定了基础。这是脚本:
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以某种方式读懂了我的想法。)