【问题标题】:Git rebase onto a tag when master and a branch is ahead of the current commits当 master 和分支在当前提交之前时,Git rebase 到标签上
【发布时间】:2016-09-29 10:43:28
【问题描述】:

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

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

我想像这样重新设置我的“功能”分支:

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

【问题讨论】:

    标签: git rebase


    【解决方案1】:

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

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

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

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

    让我们切断以下内容:

                            [ 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 上的所有内容都要求 rebase,而origin/master 上的所有内容都不在其中)。现在我们知道我们切断了什么,我们使用--onto 来指定目标。在我们的例子中是一个标签。

    关于rebase的很好的解释可以找到here

    【讨论】:

    • 我想我没有说对。 master 和 origin/master 对我来说是一样的。我只将新功能应用到主分支上。所以我不和主人做任何事。 Master 正在被遥控器更新。我将我的功能应用到本地的“功能”分支。
    • 工作起来像个骗子。感谢您的热心帮助。赞赏。
    • @somnium 你能用提交哈希做同样的事情吗?比如说,用 v2.0 标记的提交有哈希 123abcde,那么你也可以输入 git rebase --onto 123abcde origin/master 并且它会产生相同的效果?
    猜你喜欢
    • 2017-11-04
    • 1970-01-01
    • 1970-01-01
    • 2017-11-16
    • 2011-02-15
    • 2015-05-26
    • 1970-01-01
    • 2022-11-10
    相关资源
    最近更新 更多