代码之家  ›  专栏  ›  技术社区  ›  Chirag Patel

git隐藏错误:git隐藏弹出并最终导致合并冲突

  •  195
  • Chirag Patel  · 技术社区  · 15 年前

    我做了一个 git stash pop 最终导致合并冲突。我从文件系统中删除了这些文件,并做了一个 git checkout 如下图所示,但它认为这些文件仍然没有合并。然后我试着替换文件,做了一个 同样的结果。我试着用 -f 旗帜。任何帮助都将不胜感激!

    chirag-patels-macbook-pro:haloror patelc75$ git status
    app/views/layouts/_choose_patient.html.erb: needs merge
    app/views/layouts/_links.html.erb: needs merge
    # On branch prod-temp
    # Changes to be committed:
    #   (use "git reset HEAD <file>..." to unstage)
    #
    #       modified:   db/schema.rb
    #
    # Changed but not updated:
    #   (use "git add <file>..." to update what will be committed)
    #   (use "git checkout -- <file>..." to discard changes in working directory)
    #
    #       unmerged:   app/views/layouts/_choose_patient.html.erb
    #       unmerged:   app/views/layouts/_links.html.erb
    
    chirag-patels-macbook-pro:haloror patelc75$ git checkout app/views/layouts/_choose_patient.html.erb
    error: path 'app/views/layouts/_choose_patient.html.erb' is unmerged
    chirag-patels-macbook-pro:haloror patelc75$ git checkout -f app/views/layouts/_choose_patient.html.erb
    warning: path 'app/views/layouts/_choose_patient.html.erb' is unmerged
    
    4 回复  |  直到 15 年前
        1
  •  220
  •   Community CDub    5 年前

    看到了吗 man git merge (

    看到冲突后,你可以做两件事:

    • 解决冲突。Git将在工作树中标记冲突。将文件编辑为shape,然后git将它们添加到索引中。使用git commit来完成交易。

    以及以下 真正的合并 (看看2.和3.指的是什么):

    1. 头部指针保持不变。

    2. 干净合并的路径在索引文件和工作树中都会更新。

    所以:使用 git reset --hard 如果要从工作树中删除隐藏更改,或者 git reset 如果您只想清理索引,让工作树中的冲突手动合并。

    man git stash ( 选项,流行音乐

    适用国家可能会因冲突而失败;在这种情况下,它不会从隐藏列表中删除。您需要手动解决冲突,然后手动调用git stash drop。

        2
  •  43
  •   Aaron    13 年前

    我也有类似的事情发生在我身上。我还不想把这些文件放在舞台上,所以我就用 git add 然后就这么做了 git reset . 这基本上只是添加,然后取消我的变化,但清除了未合并的路径。

        3
  •  13
  •   Pedro Gimeno    9 年前

    如果像我一样,您通常想要的是用隐藏文件的内容覆盖工作目录的内容,而您仍然得到一个冲突,那么您想要的是使用 git checkout --theirs -- .

    在那之后,你可以 git reset 将索引中的所有更改带到工作目录,因为显然在发生冲突的情况下,对非冲突文件的更改保留在索引中。

    git stash drop [<stash name>] 后来,为了摆脱藏匿,因为 git stash pop 在发生冲突时不删除它。

        4
  •  2
  •   VonC    10 年前

    请注意 Git 2.5(2015年第2季度)

    看到了吗 commit ed178ef 通过 Jeff King ( peff ),2015年4月22日。
    Junio C Hamano gitster commit 05c3967 ,2015年5月19日)

    注: .

    stash :需要一个干净的索引才能应用/pop

    如果索引中有暂存内容并运行“ stash apply/pop
    .

    换句话说:

    " git stash pop/apply
    后者很重要,因为隐藏应用程序可能会发生冲突,索引将用于解决冲突。

    我们可以通过在发生阶段性更改时拒绝应用来提高安全性。

    这意味着,如果以前因为在修改过的文件(已添加但未提交)上应用隐藏而存在合并,那么现在它们将不会是任何合并,因为stashapply/pop将立即停止:

    Cannot apply stash: Your index contains uncommitted changes.
    

    强制您提交更改意味着,在合并的情况下,您可以轻松地恢复初始状态(之前) git stash apply/pop )带着 git reset --hard .


    commit 1937610 (2015年6月15日),以及 提交ed178ef (2015年4月22日) Jeff King ( peff ) .
    (合并者) Junio C Hamano -- gitster -- 在里面 commit bfb539b

    这一承诺是为了提高申请的安全性 因为应用程序进程可能会创建 原始索引状态。

    git stash -k ,例如:

    git add -p       ;# (1) stage set of proposed changes
    git stash -k     ;# (2) get rid of everything else
    make test        ;# (3) make sure proposal is reasonable
    git stash apply  ;# (4) restore original working tree
    

    如果在步骤(3)和(4)之间“git commit”,那么 胡克,你没有这个机会(你必须恢复 原始状态,无论测试是否通过