2017-06-22 148 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变化什么,只是增加了新提交的其他地方...

如果是有道理的,伟大的 - 如果不是,随便问一个评论,所以我可以澄清。