如何强制git认为文件未合并?

Sco*_*ttJ 8 git ruby-piston

我想在我的仓库中对文件进行更改,然后强制git相信文件未合并并显示git status如下:

# Unmerged paths:
#   (use "git reset HEAD <file>..." to unstage)
#   (use "git add <file>..." to mark resolution)
#
#       both modified:      lib/delayed/recipes.rb
#
Run Code Online (Sandbox Code Playgroud)

这就是我的全部问题.请继续阅读,了解原因,因为我知道这是第一件要问的问题.

这里的目的是为Piston提供一个错误修正,它现在会在索引中留下合并冲突,而这些冲突很容易被忽视.

该方法piston update可与一个Git回购是:

  • 将远程仓库克隆为新的临时git仓库
  • 检查我们看到的最后一次提交的临时回购(保存在.piston.yml中)
  • 检查我们的本地仓库(在新分支中)到最后一次提交.piston.yml的更新
  • 将我们当地的repo文件复制到temp repo中
  • 提交temp repo中的所有更改(这些是我们上次更新此出售项目时的本地更改)
  • git merge master在temp repo中运行以将我们的本地更改与远程repo的更改合并
  • IGNORE MERGE CONFLICTS(!)并将temp repo中的所有文件复制到我们的本地仓库
  • 将这些文件(在我们的新临时分支中)提交到我们的本地仓库
  • 结账当地回购我们原来的起点
  • 将temp分支合并到本地仓库中(添加我们所做的任何进一步更改)

我期望通过允许将具有合并冲突的文件提交到临时分支来解决此问题,但是在最后(在它运行之后git merge --squash)我想告诉git关于在temp repo中具有合并冲突的文件.

Jak*_*ski 12

在具有合并冲突的Git文件中,(通常)索引中有三个版本,而工作区中的版本带有diff3 -E/ rcsmergeconflict标记.索引中的版本是共同祖先的第1阶段,"我们的"版本的第2阶段,以及"他们的"版本的第3阶段.对于未合并文件,阶段0中没有版本(您可以git update-index --unresolve通过删除阶段0来恢复未合并状态).

您需要使用git ls-files --stagegit ls-tree <commit>获取要放入索引的blob(文件版本)的sha-1标识符,或者git hash-object -w <file>如果要从头开始/从工作区版本生成文件版本.然后使用git update-index --index-info将更高阶的阶段放入索引文件中(git update-index --unresolve在此之后,或者git update-index --force-remove在填充更高阶段之前从索引中删除阶段0).您可以使用工作区中的合并标记重新生成文件git checkout --conflict=merge -- <file>.

HTH(希望有助于)


另请参阅: " 如何有选择地重新创建合并状态? "Git邮件列表上的线程.