标题不是很清楚。我实际需要经常做的是:
假设我正在开发几个提交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上进行。
答案 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
,那么以下应该可以做到这一点:
git checkout A
git rebase -i --onto B SHA1-A^
...其中SHA1-A^
是分支A
有关详细信息,请参阅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
我不建议在已推送到远程仓库的分支上使用rebase
或revert
,这会给您或使用该仓库的任何其他人造成大量麻烦。