所以我确定,在某些时候,当我将一个功能分支合并到基本分支时,我放弃了一些更改,从那时起,许多其他的提交和修改被添加到基本分支中。
问题是:
有3个当前文件缺少旧提交的一些重要代码
当前3个文件已经被其他提交修改过
我想做什么:
我想基本上合并头(最后提交)与初始提交,然后从文件中丢弃一些代码块。
我试过的:Check out to commit's
创建了2个分支,第一个叫initcommit,第二个叫latestCommit…但是当我合并时,文件被覆盖了latestCommit的内容,当它应该提示我冲突错误时,但没有发生
你知道我该怎么做吗?
你可以做一些类似于"只恢复一组给定文件"的事情。:
- 创建一个补丁,该补丁描述如何仅将更改恢复到某些选定的文件
- 在当前提交上应用该补丁
带图表:
# the merge with the bad things
|
v
...*--*--*--m--*--*--*--n <- master
/
... --*--g
^
|
# the commit with the good things
您可以使用:git diff g m
查看从g
到m
的补丁,
您可以使用:git diff m g
查看反向补丁(从m
回到g
)。
所以你可以试试:
# create a revert patch only for selected files : git diff m g -- file1 file2 file3 > mypatch.txt
# apply that patch to the current HEAD : git apply mypatch.txt
你甚至可以在步骤1之后在文本编辑器中打开mypatch.txt
,如果你知道你只想在diff中保留一些选定的块,并完全删除其他的。