我有两个分支。feature
和 master
. 我做了一个合并通过。
$ git checkout feature
$ git merge master -Xdiff-algorithm=patience
这产生了一些 Unmerged paths
. 我解决了其中的一些问题。
然后,一个新的提交被推送到 master
. 这将使剩余的合并冲突变小,所以我想把它拉到我当前的合并中。
我如何才能在不丢失当前决议的情况下做到这一点?
我试着运行 git merge master
第二次,但可以理解的是,它拒绝与信息。
$ git merge master
error: Merging is not possible because you have unmerged files.
编辑: 也许 rerere
会有帮助。
简短的答案--"你不能"--是令人难以置信的不满意,但幸运的是也不是很正确。
较长的答案是丑陋但可行的。git add
剩下的未合并文件 反正,这样 Git 就会认为现在的合并结果是正确的。 然后提交合并,并把它的哈希值保存在某个地方,比如分支或标签名中。(我倾向于用一个轻量级的标签来做这件事)。 (我倾向于使用一个轻量级的标签。) 然后重置合并。
git add ...
git commit
git tag keep
git reset --hard HEAD~1
现在重新开始 当你遇到一个未合并的文件,想得到你合并的版本时,可以使用:
git show keep:path/to/merged > path/to/merged.previously
例如: 如果结果是100%正确,就用它;如果是90%正确,就用正确的部分;等等。
对每个文件都重复。 完成后,像往常一样提交合并。 当准备好时,删除saves-the-hash-ID名(如。git tag -d keep
)。
不管怎么说,这不是最好的用户界面,但它确实有效。 这里最大的缺点是,你不能很容易地回过头去看哪些文件你真的正确地解析了。 处理这个问题的方法之一是在提交部分合并之前添加一个额外的文件,列出你认为正确合并的文件。 你可以用 git show keep:MERGED.LIST
或你给这个文件起的任何名字。
如果你能记住这些信息,当然就不需要额外的文件了)。
(之所以要解析未解析的文件,是因为在解析之前,Git 不会让你提交。) 在 git stash
命令的作用是进行提交,所以它也不能做任何事情)。)