如何在git中向后移动分支?
标题不是很清楚。 我经常需要做的是:
假设我正在进行几个提交c1,c2,…和3个分支A,B,C的开发
c1--c2--c3--(B)--c4--(A,C)
分支A和C在同一个提交。
现在我想让分支A回到B的位置,让它像这样:
c1--c2--c3--(A,B)--c4--(C)
重要的是,这必须发生在本地和github上。
使用reset子命令:
git checkout A git reset --hard B git push --force github
作为一个旁注,你应该小心使用git reset
而分支被推到其他地方了。 这可能会给那些已经检查过您的更改的人带来麻烦。
如果分支A
上没有提交,那么Bram Schoenmakers给出的git reset --hard B
解决scheme将会起作用。
但是,如果有提交是必须保留的分支A
,那么下面应该做的伎俩:
- 做一个你的回购备份(以防万一)
-
git checkout A
-
git rebase -i --onto B SHA1-A^
…其中SHA1-A^
是分支A
的父级的提交标识
有关详细信息,请参阅git rebase
手册页 。
注意:这将重写历史(因为rebase总是)。 如果你的A
分公司被推到公共回购区,应该特别考虑。
在本地和远程删除分支,重新创build分支,将分支推回服务器。
git branch -d A git push origin :heads/A git branch BA git push origin A:A
或者,您可以使用以下命令撤消最后一次提交。
git revert c4
这将使您的时间线看起来像:
c1--c2--c3--(B) \ c4--(C) \ (^c4)--(A)
其中(^c4)
是一个提交撤销c4
我不build议在已经推送到远程仓库的分支上使用rebase
或revert
,他们可能会为您或使用该仓库的其他人造成很大的麻烦。
我通常使用这个顺序,find最简单的方法:
git checkout B git branch -f AB