在我的git仓库中,我有一个Master分支。一个远程开发人员创建了一个分支Branch1,并在上面进行了一堆提交。我从Branch1分支出来,创建了一个名为Branch2(git checkout -b Branch2 Branch1)的新分支,使得Branch2头位于添加到Branch1的最后一次提交中:(看起来像这样)

Master---
         \
          Branch1--commit1--commit2
                                   \
                                    Branch2 (my local branch)
Branch1进行了许多更改。另一个开发人员压缩了自己的提交,然后添加了更多提交。同时,我在我的分支机构进行了很多更改,但还没有做出任何 promise 。当前结构如下:
  Master---
             \
             Branch1--squashed commit1,2--commit3--commit4
                                       \
                                        Branch2 (my local branch)

现在,我想将更改基于Branch1。我对如何解决这个问题感到非常困惑。我知道第一步是使用git add .git commit -m "message"提交更改。但是我接着推吗?使用git push origin Branch2吗?还是git push origin Branch2 Branch1?非常需要帮助,并且非常感谢,如果我能提出一些如何创建分支备份的信息,那将非常有用,以防万一我搞砸了

最佳答案

首先备份您当前的Branch2:

# from Branch2
git checkout -b Branch2_backup

然后将Branch2重新基于Branch1:
# from Branch2
git fetch origin           # update all tracking branches, including Branch1
git rebase origin/Branch1  # rebase on latest Branch1

重新设置基准后,分支结构应如下所示:
master --
         \
          1 -- 2 -- 3 -- 4 -- Branch2'

在上图中,Branch2上的撇号表示在提交4之后,重新基于基础的Branch2中的每个提交实际上都是重写。

请记住,您现在已经重写了Branch2的历史记录,并且如果分支已经发布,则必须通过以下方式强制将其推送到远程
git push --force origin Branch2

强制推送可能会对使用Branch2的其他任何人造成问题,因此在执行此操作时应小心。

08-27 17:47