所以我的同事正在编辑存储库上的一些代码,但是她没有提取一些最近的更改,因此软件不允许她提交更改。
我们进入 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 (同事进行编辑) (分支有分歧)
!错误!(同事试图承诺和推动)
A-B-C-D-E-F(同事将师父合并到她的分支中)
A-B-C-D-E-F(同事推)
GitHub UI 现在不显示更改 D-E,它们被归为"合并分支'master'..."
git log
检查哪个提交是合并前的提交。请注意 sha。
然后,您可以使用以下方法重置它: git reset --hard commit_sha
此外,如果您想使用您的示例删除 D 和 E,请执行以下操作。除了它还将删除 F。也就是说,最后 3 个。 git reset --hard HEAD~3
如果您使用 git merge $main_branch
,GitHub 的 UI 可能会显示一些元数据,使其看起来像您暂时实现了更改,但是当您最终将所有内容合并到主分支中时,一切都会好起来的。如果您仍然担心,这里最好的选择是简单地:
-
从 master/current_branch 签出一个新分支(无论更改来自"其他团队成员",即 D,E 提交)
-
git cherry-pick $your_commits
所有 3 个提交。顺序现在将为:D-E-A-B-C 或 D-E-F-A-B-C(如果 F 也在主分支上)。