如何在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 ,那么下面应该做的伎俩:

  1. 做一个你的回购备份(以防万一)
  2. git checkout A
  3. 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议在已经推送到远程仓库的分支上使用rebaserevert ,他们可能会为您或使用该仓库的其他人造成很大的麻烦。

我通常使用这个顺序,find最简单的方法:

 git checkout B git branch -f AB