Git反向合并子树
Posted
技术标签:
【中文标题】Git反向合并子树【英文标题】:Git reverse merge of subtree 【发布时间】:2011-04-03 23:18:18 【问题描述】:我发现了一些其他关于 Git 中的反向合并的问题,但这些问题是在询问如何反向合并整个提交。我想反向合并树中的一个目录。这在 Git 中可行吗?
在颠覆中,你可以这样做:
$ cd /workingcopy/some/subtree
$ svn merge -r802:801 .
这会计算修订版 801 和 802 之间的反向差异,并且仅将其应用于当前目录。
我能想到的最好的是
$ cd /gitrepo/some/subtree
$ git diff <commit-sha1> <commit-sha1>^ . > patchfile
$ patch -p1 < patchfile
虽然我还没有实际测试过。 git 能不能做得更好?
【问题讨论】:
***.com/questions/642264/… 有帮助吗?不是一个明确的答案,但仍然是。 读完之后,我想我的问题的答案是,“不,git 做起来并不比补丁容易。” 【参考方案1】:您可以使用git checkout
来签出指定修订版的整个目录。例如,要将目录src
恢复为提交五次提交:
$ git checkout HEAD~5 -- src
$ git status # See what files changes
$ git diff --cached # Review the changes
$ git commit
【讨论】:
你想要git diff --cached
。路径上的git checkout
通过将其加载到索引中,然后将其复制到工作树中来工作。这意味着git diff
不会显示任何内容,因为索引和工作树匹配。
不过,这会吹走我之前 4 次提交的所有更改。以上是关于Git反向合并子树的主要内容,如果未能解决你的问题,请参考以下文章
在不使用反向补丁的情况下从分支中删除旧的 Git 提交? [复制]