我的存储库看起来像:
X - Y- A - B - C - D - E branch:master
\ \
\ \ merge master -> release
\ \
M --- BCDE --- N branch:release
这里“M - BCDE - N”是手动(不幸!)应用的变化,大致与单独的提交“A - B - C - D - E”相同(但似乎GIT不知道这些变化是相同的)。我想重新定义并获得以下结构:
X - Y- A - B - C - D - E branch:master
\
* branch:release
即。我想创建分支:release与分支完全相同:master并从master的HEAD中分叉它。
但是当我在分行发布时运行“git rebase master”时,GIT会报告很多冲突并拒绝改变。我怎么能解决这个问题?
对此的其他解释:我想“重新创建”分支:从头开始从主人的HEAD中释放。并且还有很多其他人已经为分支做了“git pull”:release,所以我不能使用git reset + git push -f。
答案 0 :(得分:1)
你说人们已经拉出了发布分支,所以你无法重置。这也意味着你无法改变 - 无论是哪种方式,你以非合并的方式移动引用,并使其他人感到不安。
假设您想要在发布分支上丢弃所有(我对M
感到有点困惑)并使其与master相同(为什么要显示{ {1}}?),这是你可以做的:
*
你最终会得到这个:
git checkout master
git merge --strategy=ours release # merge in release, but keep master's contents
git checkout release
git merge master # fast-forward
合并提交X - Y- A - B - C - D - E ----- Z (master, release)
\ \ /
\ \ /
\ \ /
M --- BCDE --- N
将放弃发布中的所有更改;它只是确保释放在快进中发挥作用。来自文档:
我们
这解决了任意数量的头,但是合并的结果树始终是当前分支头的树,实际上忽略了来自所有其他分支的所有更改。它旨在用来取代边支的旧发展历史。
这正是你的情况!
在合并中使用Z
选项,然后手动提交也是一个不错的主意,这样您就有机会编辑消息并记下您的操作。
答案 1 :(得分:0)
您可以使用git rebase -i master
并删除BCDE
的行,以完全放弃该修订版。如果它真的与A-B-C-D-E
相同,那么你应该没有问题。