2011-08-04 54 views
1

我试图分裂一个大的提交已被推入一个较小的后面How can I split up a Git commit buried in history?。现在,我做了一些其他更改,并放弃了一些无用的修改。如何在我的提交之前插入已提交的提交,并还原那些已提交的提交?

现在我尝试了一个推送请求,但它失败了,因为我在重新绑定期间意外删除了这些提交而不是还原它们。 git status显示:

$ git status 
# On branch master 
# Your branch and 'origin/master' have diverged, 
# and have 15 and 2 different commit(s) each, respectively. 
# 
nothing to commit (working directory clean) 

我已经尝试克隆库,恢复该承诺,将其推。接下来,我在工作目录中向上拉。这不起作用,基本上是应用我的新修改,然后再将所有东西恢复到旧状态。

在我提交之后提交还原提交之前,如何插入这两个提交(快进?)?我需要再做一次rebase吗?

我提交看起来是这样的:

A - B - C   origin/master 
    \ 
     D - E - F local working copy 

我希望它看起来像这样:

A - B - C - revert_B - D - E - F 

回答

2

是的,你只需要另一重订。如果master位于F处,则执行如下操作:

git checkout -b tmp origin/master 
git revert B 
git rebase tmp master 
git branch -d tmp 
+0

我已按问题更新了ASCII图形。 – Lekensteyn

+0

更新了我的答案。这应该照顾它。 –

+0

我收到一条警告:“警告:不会删除尚未合并到'refs/remotes/origin/master'的分支'tmp',即使它合并到了HEAD。错误:分支'tmp'不是完全合并,如果你确定要删除它,运行'git branch -D tmp'。“。这是否会发生是因为我在不向主人推送的情况下在'tmp'中提交了一个提交? (是否安全地继续删除它?) – Lekensteyn