如何反转合并提交(Git)?

时间:2016-07-13 22:58:47

标签: git github git-merge git-commit

所以我的同事正在编辑回购中的一些代码,但是她没有撤消最近的更改,所以软件不允许她提交更改。

我们进入了shell并撤回了她已经省略的提交,并且能够推动,唯一的问题是它将这些更改引入了她的分支并将这些提交归功于她。

看起来像这样:

A-B-C-D-E(说D和E是别人的)

我的同事有这个:

A-B-C,想再添加一些。

所以她拉了D和E并推动了这些改变,现在它看起来像这样:

A-B-C-D-E-F,但D,E和F的更改现在来自她的帐户。

是否可以保留她的更改(F),但是时间表会在D和E归于其他人的情况下恢复吗?

谢谢!

问题的图形表示:

A-B-C-D-E(最新版本的主人)

A-B-C(同事有此)

A-B-C-F(同事编辑)(分支机构发生分歧)

!ERROR! (同事试图提交并推动)

A-B-C-D-E-F(同事将主人合并到她的分支机构)

A-B-C-D-E-F(同事推)

GitHub UI现在不显示更改D-E,它们被集中到“合并分支'主人'......”

2 个答案:

答案 0 :(得分:0)

如果您使用git merge $main_branch,GitHub的UI可能会显示一些元数据,使您看起来像是暂时实施了更改,但是当您最终将所有内容合并到主分支中时,一切都会好起来的。如果您仍然担心,这里最好的选择就是:

  1. 从master / current_branch签出一个新分支(改变来自"其他团队成员",即D,E提交)

  2. 所有3次提交的
  3. git cherry-pick $your_commits。如果F也在主分支上,订单现在将是:D-E-A-B-C或D-E-F-A-B-C。

答案 1 :(得分:0)

使用git log检查哪个提交是合并之前的提交。注意sha。

然后你可以使用以下方法重置它: git reset --hard commit_sha

此外,如果您想使用您的示例,请删除D和E,然后执行以下操作。除了它也将删除F.也就是说,最后3。 git reset --hard HEAD~3