2013-12-15 140 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選項只是一種安全措施,以確保您只是移動分支標籤,而不是實際合併到分支(路徑)。

相關問題