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

use*_*021 46 git github

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

假设我有一个开发正在进行几个提交c1,c2,...和3个分支A,B,C

c1--c2--c3--(B)--c4--(A,C)
Run Code Online (Sandbox Code Playgroud)

分支A和C处于同一提交.

现在我希望分支A回到B所在的位置,这样它就像这样:

c1--c2--c3--(A,B)--c4--(C)
Run Code Online (Sandbox Code Playgroud)

重要的是,这必须在本地和github上进行.

Bra*_*ers 65

使用reset子命令:

git checkout A
git reset --hard B
git push --force github
Run Code Online (Sandbox Code Playgroud)

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

  • 如果分支A上有任何提交,它们将被`git reset --hard B`丢失.如果分支A上有提交,那么你应该使用`git rebase`来重新定位分支. (3认同)

Tim*_*gan 25

如果分支上没有提交A,那么git reset --hard B Bram Schoenmakers给出解决方案将起作用.

但是如果有提交是A必须保留的分支,那么以下应该做的诀窍:

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

... SHA1-A^分支的父级的提交ID 在哪里A

有关详细信息,请参见git rebase手册页.

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


Vla*_*nko 5

我通常使用此序列并找到最简单的方法:

git checkout B
git branch -f A B
Run Code Online (Sandbox Code Playgroud)