我需要用这样的单次提交来还原整个分支:
[topic]
o---o---o-------X
/
| [master]
---o---o---o提交X必须具有类似于master~2 (主题分支的起始点)的状态。
我的解决办法是:
git rev-list --reverse master..topic | while read SHA; do
git revert -n ${SHA}
done
git commit -m "Reverted topic branch"有没有更好的(更短的)解决方案?
--的目的
想象一下我有一种几乎基于git流的回购。
[release-3]
o---o---o---o
/ \ [fix-for-rc-3]
/ o---o---o
/
| [development]
---o---o---o我有一个development分支,即将到来的release-3分支和一个所谓的hot-fix-feature-for-rc-3分支。在这个分支中,我正在做一些丑陋的攻击来完成我的发布,但是我根本不希望它出现在development中,因为更多“正确”的解决方案已经在这里了,但是由于某种原因不能应用到release-3分支。所以我必须做以下几件事..。
[release-3]
o---o---o---o--------------------M
/ \ [fix-for-rc-3] /
/ o---o---o----------------X
/ \
| \[development]
---o---o---o---------------------------------D我必须将fix-for-rc-3合并到release-3 (点M),然后执行“revert this -该死”提交(点X),并将它合并为development (点D),这样代码就永远不会出现在这里,即使这样,整个release-3分支也合并到development中,然后发布就完成了。
所以我需要恢复整个分支..。
问题
虽然根本问题已经解决了,但是如果topic已经合并到release merge-base中,那么获得分支的分叉点仍然存在问题。
发布于 2013-10-14 17:57:39
您可以创建一个提交,该提交返回到分支的基础,如下所示:
# on "topic" branch
git read-tree $(git merge-base topic master)
git commit -m "Reverted topic branch"
git checkout -- . # update working copy to match the committed tree在您的示例中,您希望还原这些更改,这样您就可以将分支合并回master (或者在您的示例中称为development ),而不实际包含来自topic分支的任何更改。但是,这可以通过使用"ours“合并策略来实现,而无需添加还原提交。来自git-合并文档
我们的 这解决了任何数目的头,但是合并的结果树总是当前分支头的树,实际上忽略了来自所有其他分支的所有更改。它是用来取代旧的发展历史的侧枝。请注意,这与递归合并策略的-Xours选项不同。
例如:
git checkout master
git merge -s ours topic发布于 2013-10-14 18:16:43
可以将提交的树信息读入索引,然后提交索引。这样,您的新提交将具有与旧提交完全相同的树状态。
git checkout topic
git read-tree master~2
git commit -m 'revert complete branch'我能问一下你为什么要这样做吗?你想解决什么问题?有一个分支然后被完全恢复的目的是什么?
发布于 2013-10-14 18:16:55
什么是“合并”与“我们的”战略?
$ git checkout master~2
......
HEAD is now at 06a96da... c2
$ git merge -s ours topic
Merge made by the 'ours' strategy.
kan@altegol:/tmp/g$ git checkout topic
Warning: you are leaving 1 commit behind, not connected to
any of your branches:
cdaad73 Merge branch 'topic' into HEAD
....
Switched to branch 'topic'
$ git merge cdaad73
Updating 0b980be..cdaad73
Fast-forward与另一种解决方案相比,该解决方案更好,因为它创建了合并提交,它显式地显示了指向要恢复到的提交的确切历史。
https://stackoverflow.com/questions/19366142
复制相似问题