假設在運行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