繁体   English   中英

当master和branch在当前提交之前时,git rebase到标记上

[英]Git rebase onto a tag when master and a branch is ahead of the current commits

我和Git有困难。 我在本地机器上关注远程仓库。 主分支正在从远程更新,我总是与它同步以获取更新。 然后我的本地分支(“功能”分支)被重新定位到主分支以应用我的本地更改。 问题是我忘了将我的本地分支重新绑定到master分支的版本标签上。 相反,我重新加入了最新的master分支提交。 现在我想将我的本地分支重新绑定到master的版本标记分支而不会丢失我的本地更改。 有什么想法怎么做?

                          o -- o
                         /     ^ feature branch
o --- o --- o --- o --- o --- o --- o 
      ^ V2.0                        ^ master (origin/master)

我想像这样重新定义我的“feauture”分支:

        o -- o
       /     ^ feature branch
o --- o --- o --- o --- o --- o --- o 
      ^ V2.0                        ^ master (origin/master)

查看git rebase手册页https://git-scm.com/docs/git-rebase

远程分支origin/master (假设您的远程称为源)是上游主站。 Rebase的工作原理是选择两个分支之间的共同祖先,然后切掉一个部分:

                          o -- o
                         /     ^ feature branch
o --- o --- o --- o --- C --- o --- o 
      ^ V2.0                        ^ master (origin/master)

请注意, Cfeature-branchorigin/master之间的共同祖先。这是git rebase稍后在我们使用git rebase origin/master feature-branch时将使用的内容。

让我们切断以下内容:

                        [ X -- X ]
                         /     ^ feature branch
o --- o --- o --- o --- C --- o --- o 
      ^ V2.0                        ^ master (origin/master)

并将其附加到v2.0。 所以我们这样做:

git stash          #  move local uncomitted changes away
git checkout feature-branch
git rebase --onto v2.0 origin/master
git stash apply    # reapply uncommitted changes

变基

rebase命令将计算origin/master与当前分支之间的共同祖先。 然后它将切断您的分支独有的所有提交。 (想想它就是要求对feature-branch上的所有内容进行更改,而不是在origin/master )。 现在我们知道我们切断了什么,我们使用--onto来指定目标。 在我们的例子中是标签。

关于rebase的一个很好的解释可以在这里找到

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM