【发布时间】:2015-05-22 11:13:09
【问题描述】:
我正在做一个小组项目,在进行了一些更改并推送到原点之后(称为此提交 A),另一个人似乎强制推送了他们的更改,从而恢复了我的提交(称为此提交 @987654322 @)。
在我推送之前,我们有这样的事情:
A (master)
| B (their-master)
| |
| /
Z (origin/master)
我推后,我们得到
B (their-master)
|
A (origin/master, master)
| /
Z
他们拉取我的提交,还原它并推送
B (origin/master, their-master)
|
A (master)
|
Z
我在不知不觉中拉到了
B (origin/master, master, their-master)
|
A
|
Z
我想在A 创建一个新分支(例如“re-merge”),将B 提取到新分支以手动解决合并冲突。然后将其合并回 master,这样我们就可以保留其他人的更改并绕过强制提交。
D (origin/master, master, re-merge)
C (re-merge) | \
| | C
B (origin/master, master) --> B |
| / | /
A A
| |
Z Z
有没有办法做到这一点,而无需在A 建立分支并手动比较文件以找到我想要保留的内容?这将迫使我放弃主分支,因为B 中的强制更改现在似乎被认为是从A 快速转发。除了其他从事无关事物的人也致力于掌握。
谢谢。
【问题讨论】:
-
您绘制的内容(
B指向A作为其父项)不是强制推送。如果您最近的更改在提交A中,听起来更像是您的合作者决定revert 您的工作(全部撤消)然后可能进行其他更改并将结果作为单个提交推送@ 987654336@。然而,在你的文本的其余部分,你让它听起来像 commitA是一个常见的基本提交,你有一个现在隐藏的提交A2,而 commitB是协作者的提交;这确实可能是强制推动的结果。但是你仍然会在你的 repo 中有你的提交;你可以合并或变基。 -
啊哈,我知道我有点不清楚(我真的不知道我在说什么)。有一个共同的基本提交
Z,这是我们单独工作的内容,但我在推送B之前提交并推送了A。你可能是对的,他们在他们的 pull/merge/whatever 中恢复了我的提交并推动了它。由于我从服务器中提取了B,我看不到如何重新设置基础,或者是否可以将父级重新设置为子级(因为我的树中的B正式是A的子级)? -
如果他们恢复了你的工作,你必须重新申请。这相对容易:只需使用
git cherry-pick。根据修改后的图表查看下面的答案。