我尝试使用Method A
解决编码问题。我提交了Method A
的最佳工作示例(我将称之为"Commit 5"
)。我对Method A
并不满意。然后我继续使用Method B
开发程序。它现在在"Commit 8"
。 (全部在主分公司)
我现在决定坚持Method A
,但自Commit 5
以来,代码的许多其他部分都发生了变化。我想将与Method B
相关联的所有代码回退到Method A
,但保持其他所有内容不变。这些差异跨越多个文件。
我如何在git中实现这一目标?是否有某种"manual partial revert-merge"
工作流程来执行此操作?
答案 0 :(得分:1)
好的,我就这样做了:
我得到了HEAD和commit 5之间不同的文件列表,如下所示:
git diff HEAD..e4647 --name-status > /tmp/filelist
然后我在vim中对其进行了编辑,以删除我不想恢复的任何文件,并将其转换为名为' filestodiff'的间隔文件列表。然后,我使用该列表制作并应用了一个补丁。
git diff HEAD..e4647 -- `cat /tmp/filestodiff` > /tmp/patch
git apply /tmp/patch
有一个二进制文件(无法修补),所以我手动检查了它:
git checkout e4647 the_binary_file
这足够接近。我尝试编辑补丁文件以删除我不想要的一些单独的换行,但它只是损坏了补丁,所以我手动完成了那几行换行。
最后,我确保添加了任何新文件,它仍然构建,然后:
git commit -am 'hurray! its not borked anymore!'
答案 1 :(得分:0)
假设Method B
中的所有更改都在Commit 8
中,您只需还原Commit 8
。
检查:
https://help.github.com/desktop/guides/contributing/reverting-a-commit/
https://github.com/blog/2019-how-to-undo-almost-anything-with-git
答案 2 :(得分:0)
运行git rebase -i Commit5
,然后您可以根据需要选择要使用和编辑提交的提交。