我有一个来自另一个存储库的“默认”分支。
我的工作在“Mytask”分支。
当我完成工作后,我从远程存储库中提取修订版本7.我从本地更改集6中合并了7并且已提交到8。
Rev Branch
* 8 Default
|\
* \ 7 Default
| |
| * 6 Mytask
| |
| * 5 Mytask
| |
* | 4 Default
| |
* / 3 Default
|/
* 2 Default
|
* 1 Default
有没有人知道是否可以仅将版本8推送到远程存储库而不用我的Mytask分支推送变更集5和6?
欢迎任何反馈!
答案 0 :(得分:1)
看看这个问题的答案 about squashing commits。挤压是这种情况下的关键词。
有一个collapse extension看起来像你想要做的以及该问题上的其他链接。
答案 1 :(得分:0)
从我的问题所理解的情况来看,您感觉想要拥有与本地存储库相同的远程存储库状态。此外,您不需要额外的分支,您需要线性历史记录以及单个提交。
让我们先看看两件事,merge
和rebase
。
最初您克隆了稳定版,您提交了自己的x
和y
更改集,您从远程存储库中提取了a
,b
和{{}的更改集1}}。现在你的历史看起来像这样。
c
<强>合并强>
您希望您的存储库处于一种状态,而不是您希望拥有单个头。你选择了合并。您执行了stable -> a -> b -> c
\
\-> x -> y
和hg up -r b
,解决了合并冲突(如果有)。现在你的历史就像这样。
hg merge -r y
现在你有了一个新的提交 stable -> a -> b -> c -> d
\ /
\-> x -> y -/
,这是一个合并提交。更新到d
后,您的仓库的当前状态包含来自两个父分支的更改。
<强>衍合强>
Rebase是Mercurial中的一种延伸,您可以通过在.hgrc中添加一行来轻松使用。让我们看看当你对我们的初始状态d
做什么时会发生什么。您的历史记录如下。
hg rebase -s x -d c
在这种情况下,您有一个线性历史记录,并且您的更改集stable -> a -> b -> c -> x -> y
和x
都位于稳定分支上。
<强>结论强>
人们倾向于使用y
的{{1}}以便他们可以维护线性历史记录,这有助于与其他存储库共享更改。
在您的情况下,如果合并提交没有子项,则可以通过rebase
或merge
撤消合并提交。如果是儿童,则必须在hg rollback
上hg strip
,然后rebase
合并提交,然后y
从strip
到rebase
的整个链}}
从rebase部分(上图)中的DAG,您可以轻松推送x
和c
。如果您想要单个提交,则可以使用x
扩展名或y
命令,该命令是histedit
的一部分,这两个命令都可以折叠/合并/加入/压缩/折叠这两个提交进入一个提交,你的结果历史将是这样的。
fold
evolve
包含stable -> a -> b -> c -> z
和z
更改集的更改。
相关链接