![](/img/trans.png)
[英]Git: Your branch is ahead of 'upstream/master' by 2 commits
[英]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)
请注意, 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
来指定目标。 在我们的例子中是标签。
关于rebase的一个很好的解释可以在这里找到
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.