【问题标题】:Git won't let me mergeGit不会让我合并
【发布时间】:2013-03-14 04:03:22
【问题描述】:

晚上好!

我知道这很常见,互联网上可能有数千个答案,但我找不到一个有用的答案。

我有两个本地分支机构:

  • 大师
  • MK

我对 Mk 做了很多更改,提交了这些,然后切换到 MASTER 以合并这两个分支。但也有冲突。所以现在我在 MASTER 分支上,不能再切换到 Mk,但需要用 Mk 覆盖我的 MASTER。

它一直在说

错误:您对以下文件的本地更改将被合并覆盖

有没有办法做到这一点?

 git mergetool --tool=meld    #No files need merging
 git merge -s theirs Mk       #Could not find merge strategy 'theirs'.
 git merge -X recursive=theirs Mk   # error: Your local changes to the following files 

会被合并覆盖

我还没有将我的更改推送到我的在线存储库。

我可以看到所有更改的提交,但无法访问其代码。

前段时间刚开始使用 git,但从未遇到过类似的问题 那之前。我非常感谢我能得到的任何帮助:s

【问题讨论】:

  • git 是否在等你解决合并冲突? git status 说什么?
  • 如果你愿意核对你的工作树,你可以git checkout -f Mk
  • @Steinar 是的,我认为确实如此。我得到了很多似乎根本没有修改的修改文件。 git diff 使用“旧模式 100644 新模式 100755”打印所有文件......我已经失去了所有方向
  • @jthill 谢谢!如果需要,这是保护您的代码的好方法!

标签: git merge branching-and-merging git-merge


【解决方案1】:

既然没有--theirs strategy(即使有ways to simulate it),你能不能:

  • 将第一个master合并到mk:git checkout mk && git merge -s ours master
  • 合并 mk 到 master(快进):git checkout master && git merge mk

-s ours 策略将确保您保留mk 版本以防发生冲突。

【讨论】:

  • 感谢您的回复和参考!我会深入研究一下。由于错误,我无法检出 mk:您对以下文件的本地更改将被检出覆盖。
  • @MichaelKargl 如果您有本地更改,请先存储它们(git stash:git-scm.com/docs/git-stash
  • 这是废话。 git help mergetheirs 列为“与‘我们的’相反的策略”
  • @steve 但它不是合并策略:'ours'和'theirs'被列为'recursive'的参数合并策略。需要注意的是:“这不应该与 ours 合并策略混淆,它甚至根本不查看另一棵树包含的内容。它丢弃了另一棵树所做的一切,声明我们的历史包含其中发生的一切” .确实有一个单独的 'ours' 合并策略。但据我所知,没有'theirs'合并策略。
  • 对不起,我想我只是对 git 本身的命名选择很生气。从那以后,我找到了一种我喜欢的方法,它相当简单,我有shared below。不知道为什么我以前没有想到。
【解决方案2】:

请确保您使用的是 MASTER 的干净工作副本。

git merge -s recursive -X theirs Mk

【讨论】:

    【解决方案3】:

    我不知道如何更改主分支的某些文件的文件权限。

    git 差异:

    diff --git a/app/Resources/views/base.html.twig b/app/Resources/views/base.html.twig
    old mode 100644
    new mode 100755
    

    我提交了所做的更改:

    git commit --all -m "changes permissions from 644 to 755"
    

    在那之后,我能够像什么都没发生过一样合并分支

    git merge Mk 
    

    虽然我知道这不是最优雅的解决方案.. 但我很高兴我的代码回来了!现在我只需要弄清楚如何撤消此权限更改。感谢您的大力帮助!

    【讨论】:

    • 有趣的反馈。 +1 我想,比我的回答更适合您的特定情况。
    【解决方案4】:

    错误:您对以下文件的本地更改将被合并覆盖

    这通常是因为您有未提交的更改将被覆盖。所以首先你需要通过(1)提交或(2)存储来处理这个问题:

    git add .; git commit -m "committing my workz"
    # or
    git add.; git stash
    

    现在尝试合并。也许你们有冲突。您希望 mk 中的所有更改优先于 master 中的任何更改,因为 git 有时对检测冲突有点过于敏感(例如,没有真正的冲突),或者因为提交给 master 的人是笨蛋:

    git checkout master
    git merge mk
    # oh noes! merge conflicts
    # CONFLICT (content): Merge conflict in foo_bar.txt
    git checkout mk -- foo_bar.txt
    git commit
    

    轰!螺丝master。你不是我的主人。

    注意:git checkout 通常用于将HEAD(并更新您的工作目录)重新指向分支/标签/SHA/whatever,但如果您这样做git checkout SHA -- file,它不会重新指向您的HEAD,相反,它将更新您在 -- 之后传递的文件,以反映您传递的 SHA 中的文件/路径内容。您可以传递路径而不是确切的文件,它会检查该路径中不同的所有文件。

    【讨论】:

      猜你喜欢
      • 2016-04-04
      • 2013-07-12
      • 2012-05-29
      • 1970-01-01
      • 2022-10-25
      • 1970-01-01
      • 2017-04-11
      • 2012-08-07
      • 2017-05-05
      相关资源
      最近更新 更多