如何在git中向后移动分支?
标题不是很清楚。我实际上需要经常做的是: 假设我有一个正在进行的开发,有几个提交c1,c2,。。。和3个分支机构A、B、C如何在git中向后移动分支?,git,github,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上发生。使用reset子命令: git checkout A git reset --hard B git push --force github
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
上没有提交,那么git reset--hard B
将起作用
但是,如果存在必须保留的提交分支A
,则应执行以下操作:
git签出A
git-rebase-i--B-SHA1-A^
SHA1-A^
是分支A
有关详细信息,请参阅
注意:这将重写历史(就像rebase总是做的那样)。如果您的
分支机构被推送到公共回购,则应特别考虑。在本地和远程删除分支机构,重新创建分支机构,将分支机构推回到服务器
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
我不建议在已被推到远程回购的分支上使用重设基础
或恢复
,它们可能会给您或使用该回购的任何其他人带来很多麻烦。我通常使用此顺序,并发现这是最简单的方法:
git checkout B
git branch -f A B
如果分支A上有任何提交,它们将因git reset--hard B而丢失。如果分支A上有提交,那么您应该使用git-rebase
重新定位该分支。它到底会导致什么问题?您可能会扔掉推到服务器上的分支头,同时被其他人拉走。服务器无法在此移除的头上构建(因此需要强制推送)。同样,对等开发人员还需要强制执行可能不需要的拉操作。推操作——强制操作会导致头部与提交尾部分离(即先前的提交)。不是吗?不过,我认为值得补充的是,如何解决删除和重新创建远程分支也会给任何使用repo的人带来大量麻烦的问题。(正如我从痛苦的经历中学到的)问题是什么?我一直这样做,它从来没有引起任何麻烦,但现在我想知道我是否真的很幸运。这个力是否在较早的提交时创建了一个同名的分支?这实际上将分支A移动到了分支B所指向的修订版。如果结果在推送过程中被拒绝(更新被拒绝,因为当前分支的尖端在其远程对应分支的后面。),git push--force应该完成这项任务(如中所示)。