替换git中的另一个分支
问题描述:
在我的开发分支上,我做了一些没有解决的更改,所以我回到了两个提交,然后分支并在我的新分支上进行了所有相关更改,其中现在正确执行该任务。替换git中的另一个分支
我想让发展成为我现在的新分支。
我的想法是,我应该以某种方式从开发分支中删除这两个变化,然后再合并回来。如果这是正确的方式来做到这一点,我该怎么做?如果不是,我该怎么做才能解决这个问题?
没有其他人在这个项目上工作,所以不用担心这个问题。
答
你应该
$ git checkout develop
,然后互动变基删除两个垃圾桶承诺:
$ git rebase -i HEAD~3
删除包含您不再希望提交的行。
然后更新与新的分支所取得的进展发展:
$ git rebase new-branch
最后清理:
$ git branch -d new-branch
答
而不是想到它是“消除提交”,想的Git作为树/提交路径和git分支作为标签,您可以沿分支/路径移动。当你git commit
你是“增长”树,并沿路径进一步移动git分支标签。你可以用gitx或者git log --oneline --abbrev-commit --all --graph --decorate
自由地想象这个。
你可以把你想要做的是在路上移动develop
回2提交(reset
)到“餐桌”,你分出新的提交,然后移动develop
下提交的不同的路径是什么(merge --ff-only
) :
$ git status # make sure you don't have an uncommitted changes
$ git checkout develop
$ git tag save # bookmark just in case
$ git branch bad-branch # alternate way to save a bookmark
$ # move develop back two commits, presumably back to where you branched off
$ git reset --hard HEAD^^
$ # move develop down the other branch of commits (marked by new-branch)
$ git merge --ff-only <new-branch>
您应该刷新gitx或每个命令后运行git log
命令来帮助你在视觉上发生了什么。
--ff-only
选项只是一种安全措施,以确保您只是移动分支标签,而不是实际合并到分支(路径)。
使用'rebase'这可能是一种绕行的方式。如果较早的提交已经发布,那么很好的方法是“还原”。如果旧的提交应该完全删除,'reset --hard'(如[本答案](http://stackoverflow.com/a/1470452/1761499)中更详细解释的) –