创建一个不包括一些旧的新提交
Create a new commit not including some old
所以,我在 Mercurial 中有一个存储库,如下图所示。我需要创建一个 new commit 但 without changes 这是由两次提交完成的。让我们将这 2 个提交命名为 "commit 4" 和 "commit 16"。但我不能只是 "rewrite the history" 并删除这些提交。
根据我的理解,您想要执行以下操作:
- 取最顶层(最新)的变更集,我们称这个变更集为 23
- "Undo" 变更集 4 和变更集 16 在此基础上所做的任何事情
这给你:
- 变更集 23 仍然完好无损,包含变更集 4 和 16 所做的一切
- 你的新变更集应该是 23,除了没有任何变更集 4 和 16 所做的
操作方法如下,操作前的历史记录如下:
23
|
...
|
16
|
...
|
4
|
...
- 更新到最顶层的变更集
- 为变更集 4 创建回退变更集并提交,这将在变更集 23 之上提交
- 为变更集 16 创建一个 backount 变更集并提交,这将在变更集 24 之上提交
您的历史记录现在应该如下所示:
25 (-16)
|
24 (-4)
|
23
|
...
|
16
|
...
|
4
|
...
注意:
- 变更集 23 仍包含变更集 4 和 16
- 变更集 25 包含变更集 23,但来自 4 和 16 的更改已被撤销(撤销)
- 如果 5 及更高版本中的更改依赖于变更集 4 中引入的更改,and/or 17 及更高版本中的更改依赖于变更集 16 中引入的更改,你将遇到合并冲突,你将需要处理这些冲突合并
答案很简单:backout
您不再需要或不想要的变更集:
hg backout -rXXX
其中 XXX 是您希望看到的变更集的修订版。因此,在您的情况下,首先检查您的最后一个变更集(例如 23),然后:
hg backout -r4
hg backout -r16
你的任务完成了。
所以,我在 Mercurial 中有一个存储库,如下图所示。我需要创建一个 new commit 但 without changes 这是由两次提交完成的。让我们将这 2 个提交命名为 "commit 4" 和 "commit 16"。但我不能只是 "rewrite the history" 并删除这些提交。
根据我的理解,您想要执行以下操作:
- 取最顶层(最新)的变更集,我们称这个变更集为 23
- "Undo" 变更集 4 和变更集 16 在此基础上所做的任何事情
这给你:
- 变更集 23 仍然完好无损,包含变更集 4 和 16 所做的一切
- 你的新变更集应该是 23,除了没有任何变更集 4 和 16 所做的
操作方法如下,操作前的历史记录如下:
23
|
...
|
16
|
...
|
4
|
...
- 更新到最顶层的变更集
- 为变更集 4 创建回退变更集并提交,这将在变更集 23 之上提交
- 为变更集 16 创建一个 backount 变更集并提交,这将在变更集 24 之上提交
您的历史记录现在应该如下所示:
25 (-16)
|
24 (-4)
|
23
|
...
|
16
|
...
|
4
|
...
注意:
- 变更集 23 仍包含变更集 4 和 16
- 变更集 25 包含变更集 23,但来自 4 和 16 的更改已被撤销(撤销)
- 如果 5 及更高版本中的更改依赖于变更集 4 中引入的更改,and/or 17 及更高版本中的更改依赖于变更集 16 中引入的更改,你将遇到合并冲突,你将需要处理这些冲突合并
答案很简单:backout
您不再需要或不想要的变更集:
hg backout -rXXX
其中 XXX 是您希望看到的变更集的修订版。因此,在您的情况下,首先检查您的最后一个变更集(例如 23),然后:
hg backout -r4
hg backout -r16
你的任务完成了。