我和Git有困难.我在本地机器上关注远程仓库.主分支正在从远程更新,我总是与它同步以获取更新.然后我的本地分支("功能"分支)被重新定位到主分支以应用我的本地更改.问题是我忘了将我的本地分支重新绑定到master分支的版本标签上.相反,我重新加入了最新的master分支提交.现在我想将我的本地分支重新绑定到master的版本标记分支而不会丢失我的本地更改.有什么想法怎么做?
o -- o
/ ^ feature branch
o --- o --- o --- o --- o --- o --- o
^ V2.0 ^ master (origin/master)
Run Code Online (Sandbox Code Playgroud)
我想像这样重新定义我的"feauture"分支:
o -- o
/ ^ feature branch
o --- o --- o --- o --- o --- o --- o
^ V2.0 ^ master (origin/master)
Run Code Online (Sandbox Code Playgroud)
som*_*ium 11
查看git rebase手册页https://git-scm.com/docs/git-rebase.
远程分支origin/master(假设您的远程称为origin)是上游主站.Rebase的工作原理是选择两个分支之间的共同祖先,然后切掉一个部分:
o -- o
/ ^ feature branch
o --- o --- o --- o --- C --- o --- o
^ V2.0 ^ master (origin/master)
Run Code Online (Sandbox Code Playgroud)
注意,这是和C之间的共同祖先.这是git rebase稍后将在我们使用时使用的内容.feature-branchorigin/mastergit rebase origin/master feature-branch
让我们切断以下内容:
[ X -- X ]
/ ^ feature branch
o --- o --- o --- o --- C --- o --- o
^ V2.0 ^ master (origin/master)
Run Code Online (Sandbox Code Playgroud)
并将其附加到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
Run Code Online (Sandbox Code Playgroud)
rebase命令将计算origin/master当前分支与当前分支之间的共同祖先.然后它将切断您的分支独有的所有提交.(考虑一下,因为要求对其中的所有内容feature-branch进行重新定义origin/master).现在我们知道我们切断了什么,我们使用它--onto来指定目标.在我们的例子中是标签.
关于rebase的一个很好的解释可以在这里找到
| 归档时间: |
|
| 查看次数: |
9952 次 |
| 最近记录: |