在我的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
的其他任何人造成问题,因此在执行此操作时应小心。