Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在git中向后移动分支?_Git_Github - Fatal编程技术网

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

如何在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,。。。和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
上没有提交,那么
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应该完成这项任务(如中所示)。