2017-06-22 147 views
-2

我們有一個主分支,一個暫存分支不在主分支中,我的功能分支不在分期中。這裏有一個圖:如何刪除特定的提交?

 my_feature: o--o--o---o--o <= after rebase, contains commits 
       /  /  from other_feature 
other_feature: o--o /
      / \ /
    staging: o--o---o--o 
      /   
    master: o--o--o--o-o--o--o--o--o <= master 

我重建基礎my_feature分支後other_feature被合併staging與融入staging的意向,但後來意識到my_feature應該直接合併爲master

現在的問題是,我有other_feature承諾在這個時候在master沒有業務。

當我嘗試git revert --no-commit 65b2e1b時,它返回未合併文件列表和fatal: Your index file is unmerged。我不知道這是什麼意思。

git status返回上述未合併文件。所以我跑git commit -am "revert",它返回一條消息You are currently reverting commit 5a53cd0. nothing to commit, working directory clean。如果我然後嘗試git push它只是說everything is up to date

有什麼建議嗎?

+0

這些「未合併」消息表示您處於合併過程中。你看到的狀態表明你已經開始了這個恢復,並且仍然處於中間。如果你想恢復提交,你必須手動完成合並過程,'git commit'返回。在此之前,'git push'不會很有用,因爲Git只會推送*提交*,並且正在進行的還原 - 那個具有合併衝突並不是一個新的提交。 – torek

+0

根據您的問題更新,聽起來您不應該還原,而是完全撤銷您的原始底牌,並重新啓動具有所需目標的底牌過程。如果這是正確的,而不是完成你目前的回覆,只需'git revert --abort'來終止它,回到你的基準狀態;然後撤消你的rebase,使用你的功能分支的reflog。 – torek

+0

感謝您的幫助!如果幾天前發生重組,那麼從那以後有很多工作要做? 現在有人能幫助我理解爲什麼人們會低估這樣的問題嗎?這是不合理的嗎? –

回答

0

您可以撤消原來的重訂一個新的底墊:

git checkout my_feature 
git rebase --onto original_master staging 

...其中original_master是最左/在你的ASCII圖片,即向下提交,提交您最初支my_feature客(我認爲這就是你所做的,儘管你的照片顯示的是左邊o的嚴格解釋)。

這將original_master開始,然後從staging申請每次修補高達my_feature,或者,換句話說,它會original_masterstaging之間從my_feature「刪除」任何東西。形象地說,當然,我敢肯定大家都知道,git rebase變化什麼,只是增加了新提交的其他地方...

如果是有道理的,偉大的 - 如果不是,隨便問一個評論,所以我可以澄清。