如何在git中向后移动分支?

时间:2010-05-27 16:44:04

标签: git github

标题不是很清楚。我实际需要经常做的是:

假设我正在开发几个提交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上进行。

4 个答案:

答案 0 :(得分:64)

使用reset子命令:

git checkout A
git reset --hard B
git push --force github

作为旁注,当分支已经被推到别处时,使用git reset时应该小心。这可能会给那些已经检查过更改的人带来麻烦。

答案 1 :(得分:23)

如果分支A上没有提交,则git reset --hard B solution given by Bram Schoenmakers将有效。

但是如果有提交是必须保留的分支A,那么以下应该可以做到这一点:

  1. 制作您的仓库的备份副本(以防万一)
  2. git checkout A
  3. git rebase -i --onto B SHA1-A^
  4. ...其中SHA1-A^是分支A

    的父级的提交ID

    有关详细信息,请参阅git rebase man page

    注意:这将重写历史记录(因为rebase总是如此)。如果您的A分支机构被推送到公共仓库,则应特别考虑。

答案 2 :(得分:4)

我通常使用这个序列,并以最简单的方式找到它:

git checkout B
git branch -f A B

答案 3 :(得分:1)

在本地和远程删除分支,重新创建分支,将分支推回服务器。

git branch -d A
git push origin :heads/A
git branch B A
git push origin A:A

或者,您可以使用以下命令撤消上次提交。

git revert c4

这将使您的时间表看起来像:

c1--c2--c3--(B)
             \
              c4--(C)
               \
                (^c4)--(A)

其中(^c4)是撤消c4

的提交

我不建议在已推送到远程仓库的分支上使用rebaserevert,这会给您或使用该仓库的任何其他人造成大量麻烦。