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

Jam*_*Yen 11 git github git-merge git-commit

因此,我的同事正在存储库上编辑一些代码,但是她没有提取最近的一些更改,因此该软件不允许她提交更改。

我们进入 shell 并拉出她省略的提交,并且她能够推送,唯一的问题是它将这些更改绘制到她的分歧分支中并将这些提交归因于她。

它看起来像这样:

ABCDE(假设 D 和 E 是别人写的)

我的同事有这样的:

ABC,并想添加更多内容。

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

ABCDEF,除了 D、E 和 F 的更改现在来自她的帐户。

是否有办法保留她的更改(F),但让时间线恢复到 D 和 E 归属于其他人时的状态?

谢谢!

问题的图形表示:

ABCDE(最新版本的master)

ABC(同事有这个)

ABCF(同事进行编辑)(分支有分歧)

!错误!(同事试图承诺并推动)

ABCDEF(同事将master合并到她的分支中)

ABCDEF(同事推动)

GitHub UI 现在不显示 DE 更改,它们被集中到“合并分支‘master’...”

Man*_*nil 9

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

然后您可以使用以下命令重置它: git reset --hard commit_sha

另外,如果您想使用您的示例删除 D 和 E,然后执行以下操作。但它也会删除 F。即最后 3 个。 git reset --hard HEAD~3


Tor*_*yne 0

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

  1. 从 master/current_branch 签出一个新分支(无论更改来自“其他团队成员”,即 D、E 提交)

  2. git cherry-pick $your_commits对于您的所有 3 个提交。现在的顺序将是:DEABC,或者 DEFABC(如果 F 也在 master 分支上)。