可以在公共回购中反映出由条带所做的更改吗?

Geo*_*Geo 11 mercurial strip

假设我有这个:

hg clone public_repo my_repo
touch a b c d
hg add .
hg commit -m a a
hg commit -m b b
hg commit -m c c
hg commit -m d d
hg push
# let's say revX is the revision that added a 
hg strip revX
Run Code Online (Sandbox Code Playgroud)

在我的存储库的历史记录中,提交已经消失.但是,如果我尝试在条带之后进行推动,它会告诉我no changes found.这条带可以应用于公共仓库吗?

编辑:问题只是假设:).我不是在这种情况下,我只是觉得找出它如何工作会很有趣.

Cat*_*lus 10

你需要在hg strip那里跑.如果它是bitbucket repo,您​​可以从管理面板执行此操作.如果没有,请SSH.


glg*_*lgl 9

这是不可能的.你也必须剥离公共回购.

hg strip只是带走了变更集.它不执行可以推送的"添加"操作.

在您提供的确切示例中,您可以只hg rollback使用公共仓库.


Hel*_*lgi 7

让我假装你问一个稍微不同的问题:我已经删除了部分存储库历史记录,如何将此更改传播到其他开发人员的存储库?

Mercurial无法以与传播添加更改集相同的方式传播剥离.所以你必须想出自己的方式.

例如,Bitbucket有一个更新列表(在repo摘要页面上,如果我的记忆能很好的话).如果你做一个条带,Bitbucket会显示如下:

Changeset 12345abcdef已从存储库中删除,请在hg strip 12345abcdef本地运行.

当我们不得不在我们的商店中传播剥离旧分支的一部分时,这就是我们所做的:

  1. 剥离了服务器上的更改集.
  2. 创建一个名为批处理文件strip.batdefault包含我们会在服务器上运行,即命令回购的分支hg strip 1234567890.
  3. 告诉所有人,无论何时他们无法推动,因为"推动创造新的远程头部"没有明显的原因,这意味着他们应该跑strip.bat.

如果我们需要再次剥离某些东西,我们只需hg strip在批处理文件中添加另一个.

PS是的最好不要剥离,例如使用backout来提交逆变换集.有时候,这是不是一种选择:如果你误合并分支a到分支b当你想要合并ba,你困.即使您退出合并变更集feature,合并的变更集a也已标记为已合并,您将很难再进行这些分支的合并.