【问题标题】:How to solve git conflicts by having only the conflict files?如何通过只有冲突文件来解决 git 冲突?
【发布时间】:2015-09-23 21:38:44
【问题描述】:

我的 git 合并有很大问题,我的 repo 现在有点麻烦。

实际上,我有很多 个文件看起来是这样的:

<<<<<<< HEAD
...version1...
=======
...version2...
>>>>>>> <long hexa code>

众所周知,这是合并冲突情况下的正常行为。 但是我没有其他文件版本,只有这些。

如何以交互方式合并它?我需要的是看到彼此相邻的“version1”和“version2”并能够以交互方式合并它们。

当然,这些文件格式意味着每个软件都会出现语法错误。

git merge 和所有的合并工具都在说,没有合并冲突。但是,有。

我该怎么办?

扩展#1: 我用一些 shellscripting 分割文件,使用命令

for i in $(cat ../conflicts); do csplit $i '/=======/' -f $i. -n 1;done

现在我在path.0path.1 中有这些文件的一部分。现在我需要一个交互式解决方案来合并它们。

【问题讨论】:

  • 我很好奇你是怎么进入这种状态的。似乎有人犯了未解决的冲突。你应该追捕他们:-)。或者,找到提交的冲突未解决的提交,并将其还原,然后重新合并。
  • 有人开始合并,而我在工作副本中的更改尚未提交。 :-(
  • 唯一能做到这一点的人就是你。 git pullgit merge 仅应在您的工作副本干净时运行。
  • @Daniel 有时有一些信誉良好的同事认为我无法完成我的工作并想提供帮助。有时这会导致数据丢失。现在我需要我的核心 shellscripting 和 gitting 技能来修复他们的帮助。

标签: git merge recovery disaster-recovery


【解决方案1】:

如果 git 说没有合并冲突,那么这些文件要么已按原样添加,要么已提交。

如果它们是按原样添加的,那么您应该运行 git reset HEAD 这将重置索引的状态。然后,您应该会再次看到已提交的所有文件都是新文件,在这种情况下,您可以单独处理它们。

如果它们实际上已经提交,那么您需要撤消合并节点,然后再次执行合并节点。您可以使用git reset --hard HEAD^ 重置到最后一个已知点(并丢弃提交)并再次重新进行合并。请注意,此选项会丢失您的数据;您实际上是在重新进行合并。

【讨论】:

  • 那么我将丢失仅在我的工作副本中的更改。
  • 请注意,git reset HEAD 不会丢失更改。但是,如果您已经使用代码提交了合并提交,则无论如何您都必须修复/修改它。
  • 问题搞清楚后,我当场发了git add .; git commit。所以,我现在有一个旧的、无错误的文件版本,以及一个新版本,处于我在问题中描述的状态。
  • 所以通过执行 git commit 你告诉 Git 没有任何错误并且忽略存在冲突的事实。如果您想自动解决它们,您需要按照我的建议再次重新进行合并,或者您需要手动修复每个冲突的文件。
  • 这个手动修复正是我正在寻找的自动化或交互式解决方案。
【解决方案2】:

如果您想解决图形环境中的冲突,可以尝试git mergetool 命令。当然,您需要安装有效工具之一。这是文档的摘录;注意列出的有效值:

git mergetool [--tool=<tool>] [-y | --[no-]prompt] [<file>...]

   -t <tool>, --tool=<tool>
       Use the merge resolution program specified by <tool>. Valid values include emerge, gvimdiff,
       kdiff3, meld, vimdiff, and tortoisemerge. Run git mergetool --tool-help for the list of
       valid <tool> settings. 

【讨论】:

  • 问题是不再有合并 - 文件已经提交,所以 Git 认为没有任何进一步的工作要做。
  • 所有工具都说没有合并冲突。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-05
  • 2010-11-28
  • 2018-05-15
  • 1970-01-01
  • 1970-01-01
  • 2015-10-15
  • 1970-01-01
相关资源
最近更新 更多