2013-12-15 107 views
1

在我的开发分支上,我做了一些没有解决的更改,所以我回到了两个提交,然后分支并在我的新分支上进行了所有相关更改,其中现在正确执行该任务。替换git中的另一个分支

我想让发展成为我现在的新分支。

我的想法是,我应该以某种方式从开发分支中删除这两个变化,然后再合并回来。如果这是正确的方式来做到这一点,我该怎么做?如果不是,我该怎么做才能解决这个问题?

没有其他人在这个项目上工作,所以不用担心这个问题。

回答

1

你应该

$ git checkout develop 

,然后互动变基删除两个垃圾桶承诺:

$ git rebase -i HEAD~3 

删除包含您不再希望提交的行。

然后更新与新的分支所取得的进展发展:

$ git rebase new-branch 

最后清理:

$ git branch -d new-branch 
+1

使用'rebase'这可能是一种绕行的方式。如果较早的提交已经发布,那么很好的方法是“还原”。如果旧的提交应该完全删除,'reset --hard'(如[本答案](http://stackoverflow.com/a/1470452/1761499)中更详细解释的) –

0

而不是想到它是“消除提交”,想的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选项只是一种安全措施,以确保您只是移动分支标签,而不是实际合并到分支(路径)。

相关问题