Git 当 master 和分支领先于当前提交时变基到标签上
Git rebase onto a tag when master and a branch is ahead of the current commits
我在使用 Git 时遇到困难。我在我的本地机器上关注一个远程仓库。主分支正在从远程更新,我总是与它同步以获取更新。然后我的本地分支("feature" 分支)重新基于 master 分支以应用我的本地更改。问题是我忘记将我的本地分支重新定位到 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 变基联机帮助页 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)
注意 C
是 feature-branch
和 origin/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
来指定目标。在我们的例子中是一个标签。
可以找到关于变基的很好的解释here
我在使用 Git 时遇到困难。我在我的本地机器上关注一个远程仓库。主分支正在从远程更新,我总是与它同步以获取更新。然后我的本地分支("feature" 分支)重新基于 master 分支以应用我的本地更改。问题是我忘记将我的本地分支重新定位到 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 变基联机帮助页 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)
注意 C
是 feature-branch
和 origin/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
来指定目标。在我们的例子中是一个标签。
可以找到关于变基的很好的解释here