Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在发布分支中隐藏git提交_Git - Fatal编程技术网

在发布分支中隐藏git提交

在发布分支中隐藏git提交,git,Git,我有一个git项目,有很多提交 a-b-c-d-e-f-g-h-i 我想把它推到一个发布分支,在那里只能看到标记的提交。e、 g a-d-h 我尝试过使用rebase和壁球合并,但似乎没有任何效果。 我读到,一旦提交被推送到git服务器上,就不可能实现rebase,这可能是我的问题吗。 有人有好的提示吗 编辑 我找到了一个有点难看但有用的解决方案。 我创建了一个发布存储库和一个小脚本,用于签出发布提交并将其复制到发布存储库并在那里提交 感谢您的回复,说这实际上是不可能的。假设您希望看到的是一个只

我有一个git项目,有很多提交

a-b-c-d-e-f-g-h-i

我想把它推到一个发布分支,在那里只能看到标记的提交。e、 g

a-d-h

我尝试过使用rebase和壁球合并,但似乎没有任何效果。 我读到,一旦提交被推送到git服务器上,就不可能实现rebase,这可能是我的问题吗。 有人有好的提示吗

编辑

我找到了一个有点难看但有用的解决方案。 我创建了一个发布存储库和一个小脚本,用于签出发布提交并将其复制到发布存储库并在那里提交


感谢您的回复,说这实际上是不可能的。

假设您希望看到的是一个只包含少量修订的直分支,并且与您用于开发的分支的历史无关,您可以通过两种方式来实现:

  • 通过使用提交树。使用
    git commit tree
    可以创建修订,指定父(或多个父)和树(该修订上的文件内容)。 您可以从您喜欢的任何修订中指定树,并且可以提供希望新修订具有的父级。这样,您就可以“跳过”所有分支历史记录,如果这是您想要的。不漂亮,但可能。如果要使用修订版G的树创建修订版M,请将A作为父级:

    • 获取修订版G的树对象(git cat file-pg)
    • 创建修订对象:git commit tree-pa-m“这是对修订的注释”tree-object-for-G-from-git-cat-file
    • 将分支指向此新修订版
  • 通过签出您想要的树并提交。那么,假设您在修订版A上签出:

    • git签出A
    • git checkout G--.#在修订版G上检查项目的全部内容。。。不确定文件是否将被删除/重命名。。。小心
    • git commit-m“修订注释”
    • 在此修订版上创建一个新分支,您就完成了

您不能“隐藏”提交,您可以将它们保存在存储库中,也可以不保存。使用merge或rebase挤压它们将删除它们,将它们的更改折叠到另一个提交中。这就是你想要的吗?除非你把它们的副本放在“看不见”的地方,否则你将丢失原始提交。你可能想编辑这篇文章,并澄清你所说的“看到”和“隐藏”是什么意思。如果您只想将相同的一系列更改压缩为3次提交,这是一件事,如果您希望以某种方式在文件中进行更改,但提交不再在日志中,但提交仍然存在-这是完全不同的,而且不可能实现。