如何在magit的文件中检出我们/他们的文件?


16

假设我有合并冲突。我看到这样的冲突文件:

Unstaged changes:
    Unmerged   Foo/bar/wibble/plop/elbow.txt

我可以单击此处的选项卡以打开更改,并可能跳至手动修复的文件中的某个点,但是如果它是一个包含大量冲突的大文件,则可能会非常耗时。

我怎样才能通过git要求git签出文件的版本,以解决冲突?我可以复制路径,然后使用Shift-:它输入自定义git命令,但似乎必须为此使用键盘快捷键。我在magit菜单或?弹出窗口中看不到任何明显的内容。


3
虽然这不能直接回答您的问题,但是可能很有用。将点移动到冲突文件中magit-status,然后按e开始与的三向合并ediff。另一种选择是,在冲突缓冲区中,您可以打开smerge-mode以突出显示冲突并直接在缓冲区(而不是ediff)中执行交互式合并。smerge-mode相关命令的前缀键绑定为C-c ^;您可以按C-c ^ C-h查看所有键绑定。
Tu Do

我在文档中也找不到“我们的”或“他们的”。magit.github.io/master/magit.html#Pushing-and-Pulling
Ehvince 2014年

1
看起来是打开功能请求的好问题吗?
Ehvince 2014年

1
好主意@Ehvince,已完成:github.com/magit/magit/issues/1643
tenpn 2014年

1
哦:在magit的下一版本中,您可以k选择一个版本并选择要保留的版本。听起来很完美!github.com/magit/magit/issues/1643
tenpn 2014年

Answers:


16

我不确定何时添加此功能,但是它可以完美地做到这一点:

  1. 将一个分支合并到另一个分支并遇到冲突
  2. 在Magit缓冲区,将有部分Merging master,和Unstaged changesStaged changes。冲突的文件位于Unstaged changes
  3. 在包含冲突文件的行上,单击k以放弃更改(即,冲突的更改)
  4. 在迷你缓冲区中,您将看到答案:

For <conflicted file> checkout: [o]ur stage, [t]heir stage, [c]onflict, or [C-g] to abort


5

有几种解决方案:

  • 使用smerge-ediff。在存在冲突的文件中,运行M-x smerge-ediff。它将使您进入ediff解析模式,其中包含四个打开的缓冲区:您的缓冲区,它们的缓冲区,merge和命令缓冲区。在命令缓冲区中,使用np进入下一个或上一个厚块,“ a”或“ b”接受第一个或第二个缓冲区中的更改,或者可以转到合并缓冲区,然后根据自己的喜好对其进行编辑。
  • 在magit e的稳定版本上使用magit 的ediff或在magit的下一个分支中使用or M-eM-mmagit-ediff-resolve),然后您将发现自己与第一种情况最相似
  • 也有smerge模式,C-c ^ nC-c ^ p会帮助你从一个帅哥去上一个或下一个,你就可以对其进行编辑,或使用C-c ^ o以保持“其他”版本,C-c ^ m以保持“我的”的版本,C-c ^ b保留旧的版本并C-c ^ a保留所有内容。
  • 您可以使用magit-find-file打开文件,就像在某些提交中一样。

我没有看到Tu Do已经拥有我在此处发布的大部分答案。索里
雷米

感谢您提供的综合清单,但我想“是否有一种简单的方法来获得Ours或Thiers版本”的答案是否定的。:(
tenpn
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.