【问题标题】:How to move a file back into the conflict state after conflict resolution?解决冲突后如何将文件移回冲突状态?
【发布时间】:2018-01-12 00:05:39
【问题描述】:

我有一个真正的冲突解决集,我想我会去做,如果我失败了,那么我应该能够将文件恢复到它的冲突状态。但是,我似乎找不到回去的方法。 git 还处于 MERGING 状态,如何备份单个文件并重新解析?

【问题讨论】:

  • 在拉取文件之前是否将文件推送到分支?
  • @RICKYKUMAR,不确定你的意思。我对文件集进行了很多修改。我做了一个git merge branch_name。然后我做了一个git mergetool。现在我想撤消一个特定的文件。我是否必须对该文件进行硬重置并重新合并?甚至不确定是否可以对单个文件执行此操作。

标签: git git-merge-conflict


【解决方案1】:

首先,如果您认为自己的分辨率(或部分分辨率)不错,请将文件复制到其他位置。 :-) 然后运行:

git checkout -m -- <em>path</em>

(仅当文件的 path 类似于有效的 git checkout 选项时才需要 -- 部分,例如,如果您要恢复为冲突状态的文件名为 @987654325 @ 或 -f 或类似的)。这将从三个输入(合并基础和两个分支头)重新创建文件的冲突标记变体,并将该文件写入工作树。

请注意,您可以指定--conflict=merge(默认)样式或--conflict=diff3 样式。这与在.gitconfig 中设置merge.conflictStyle 相同,但仅针对那个文件和这个结帐。

如果您(或 git mergetool)使用了已在已解决变体上运行 git add 的合并工具,请注意这会使文件恢复到冲突状态,即,它将三个更高阶段的条目恢复到索引中。您现在可以再次运行git mergetool,或者——我个人的偏好——只要你确信它是正确的,就手动编辑冲突的文件和git add生成的工作树副本。

【讨论】:

  • git checkout -m -- path 是我缺少的拼图。谢谢。
  • 嗯。您只能通过运行git mergegit pull 来获得此信息,而不是通过运行git checkout -m
  • 是的,在命令行历史记录中编辑了一行。没有看到merge 命令。
  • git checkout -m upstream/save -- README.md 作为单个测试文件之后,git mergetool 返回“没有文件需要合并”:( 而git diff HEAD 显示了一些不需要的更改。如何强制运行 mergetool GUI ,允许我有选择地从 B 或 C 端选择编辑?(A 是 base
  • @Marcos: git checkout -m 如果您还没有处于合并中,则其行为会有所不同。如果您仍然处于未完成的合并中——即,您尚未结束与git commitgit merge --continue 的合并——您将运行git checkout -m -- README.md 将其恢复到未合并状态。我不确定如果你也命名一个提交会发生什么。
猜你喜欢
  • 2016-10-29
  • 2015-09-23
  • 2010-11-28
  • 2012-01-09
  • 2016-02-22
  • 2013-11-09
  • 1970-01-01
  • 2013-02-18
  • 2012-10-24
相关资源
最近更新 更多