假设在运行git stash pop
时,会收到CONFLICT
消息(由于自动合并尝试失败而产生)。
是否可以通过快速方式告诉git
解决所有冲突,以支持刚刚弹出的存储空间?
编辑:我刚刚编写了以下脚本来测试提出的两个备选方案。它
/tmp/$1
中创建一个新的git仓库,并在cd
中创建一个新的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以某种方式阅读了我的想法。)
答案 0 :(得分:3)
您需要为each file in conflict运行git checkout --theirs <file>
:
git checkout --theirs `git diff --name-only --diff-filter=U`
答案 1 :(得分:2)
自己做合并,而不是藏匿流行音乐。存储提交名为stash
。
git merge --squash -Xtheirs stash