如何解决所有合并冲突,支持刚刚弹出的存储?

时间:2013-05-08 20:42:38

标签: git

假设在运行git stash pop时,会收到CONFLICT消息(由于自动合并尝试失败而产生)。

是否可以通过快速方式告诉git解决所有冲突,以支持刚刚弹出的存储空间?

编辑:我刚刚编写了以下脚本来测试提出的两个备选方案。它

  1. 在目录/tmp/$1中创建一个新的git仓库,并在cd中创建一个新的git仓库;
  2. 创建文件的第一个版本并提交它;
  3. 对文件进行一些更改并存储文件;
  4. 对文件进行其他更改(包括冲突和非冲突的更改),并提交这些更改;最后
  5. 弹出藏匿处
  6. 这为比较两种提出的方​​法奠定了基础。这是脚本:

    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以某种方式阅读了我的想法。)

2 个答案:

答案 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