Gitlovers,我有一个问题。
几次提交之前,在最后一次将dev分支合并到master之后,我忘了切换回dev分支。我继续向错误的分支提交:master - 应该回到合并发生的地方。我如何交换分支,以便在我将其合并到主服务器之后将其转换回dev分支?
我尝试使用rebase:
git checkout master; git rebase dev;
和
git checkout master; git rebase --onto dev;
为我做了一些奇怪的事情..
答案 0 :(得分:3)
一种通用解决方案,也适用于历史不是线性的更复杂场景。 确保您在主分支,然后:
git rebase --preserve-merges --onto master^2 master dev
你遇到这种情况必然发生的事情是你这样做了:
错误是第4步。这称为后合并,应该避免 - 虽然一些基于干线的工作流程会从中受益。
答案 1 :(得分:2)
您基本上将一堆提交从主分支移回到dev分支。我有类似的情况试图将提交从一个主题分支移动到另一个主题分支。 --onto
命令的rebase
开关执行此操作。我不想在这里重复我的整篇博文,但这是我详细说明我所做的事情 - http://nibrahim.net.in/2012/01/09/moving_topic_branches_in_git.html
答案 2 :(得分:1)
你可以尝试:
$ git checkout dev
$ git merge master
$ get checkout master
$ get reset --hard [the revision you want to return]
答案 3 :(得分:1)
无需变基或合并。分支只不过是提交标签。您可以使用git reset
移动标签。尽管名称如此,reset
实际上是move labels around
命令。
git tag master dev.target
在我们移动主人之前,存储dev应该去的标签。git checkout master
git reset --hard dev
将主人移至dev所在的地方。git checkout dev
git reset --hard dev.target
将dev移至master所在的位置。git tag -d dev.target
删除占位符。你可以在没有使用提交ID的标签的情况下做到这一点,但是标签是一个很大的保险,以防你搞砸了。这主要是来自git-reset man page的“撤消提交,使其成为主题分支”的配方,除了您的主题分支已经存在。
或者,因为你只想交换分支,你可以重命名它们!
git branch -m master dev.mv
git branch -m dev master
git branch -m dev.mv dev
缺点是,如果他们有任何上游跟踪,那将是不正确的。你必须进入.git/config
才能纠正它。