假设一个文件与git处于冲突状态。
这意味着索引包含3个版本的文件,前一个,一个分支,另一个分支。
我想在工作目录中查看版本3(“他们的”),并在索引中查看版本2(“我们的”)。
有没有一种无痛的方法可以做到这一点?
答案 0 :(得分:4)
可能最痛苦的方式就是这样。
# Checkout 'their' version from the index into the working tree
git checkout --theirs file
# reset the index to the HEAD version, i.e 'our' branch
git reset HEAD file
除非您丢失update-index
(可以这么说),否则不应该使用HEAD
管道来摆弄索引。
答案 1 :(得分:1)
诀窍在于“向索引添加一个版本”:这会将文件标记为已解决(意味着不再是“我们的”或“他们的”)。
所以它需要是最后一步。
可能是这样的:
git show :3:<filename> > <filename>.theirs # save the "theirs" version in a tmp file
git show :2:<filename> > <filename> # display the "ours" version in the working dir
git add <filename> # add it to the index
# (marking the conflicting file as resolved)
move <filename>.theirs <filename> # erasing the file with the "theirs" version
# in the working directory
不完全“无痛”......
要避免使用临时文件,Jakub Narębski建议使用 git update index
(管道命令)直接操作索引。
--replace --cacheinfo <mode> <object> <path>
--cacheinfo
用于注册不在当前工作目录中的文件。这对于最小结账合并非常有用。默认情况下,当索引中存在文件路径时,git update-index拒绝尝试添加
path/file
。同样,如果存在文件path/file
,则无法添加文件路径。使用--replace
标志时,将自动删除与添加的条目冲突的现有条目,并显示警告消息。