make git just * copy *(not merge)?

时间:2016-03-02 22:15:13

标签: git tags git-merge

我怎么能告诉git"让这个分支HEAD看起来就像这个其他分支HEAD"?

我们有一些关于develop开发,分支发布以及尽一切可能使发布分支工作的历史。但我们对更新master一直不严格。幸运的是,我们有实际发布的标签。我们现在想要事后,使master成为已发布的一系列版本。

这不仅仅是解决所有合并冲突,而且还有#34 ;;如果愿意的话,我希望所有差异已经解决了"他们的#34;例如,如果在release/1过程中我们将 x = x + 1; 添加到 Foo.java ,但从未将其添加到developrelease/2,然后当我们将release/1传递给master时,此行应该在那里,但是当我们将release/2传递给master时,它应该消失。明白,在历史上任何地方都没有任何改变,删除线;它只是被添加到一个死胡同。

另外,我认为git rebase ....并不是我想要的:我不想失去深刻的历史。在我为第1版到第37版成功完成此操作后,git log master应显示实际为每个版本做出贡献的所有更改(可能还有一些合并修复提交)。

2 个答案:

答案 0 :(得分:3)

如果我理解正确,你基本上想要在master上进行一次新的提交,实际上会删除master下的所有内容,并将所有内容全部替换为(现在仍然是)在release/X下。

有更短更快的方法,但我会首先向您展示较慢的方法,因为我认为它更清晰。请注意,这假设您位于git目录的顶层(git rev-parse --show-cdup将告诉您可能需要多少../才能达到该级别):

$ git checkout master           # onto the branch we want to whack
$ git rm -rf .                  # remove everything
$ git checkout release/X -- .   # repopulate index and work tree
$ git commit                    # and commit the result

如果这确实是您想要做的,请注意您可以使用git commit-tree更快地执行此操作,release/X通过获取给定的树ID和父ID来向存储库添加新提交。由于所需的新树与某些现有树(master的树)100%相同,因此您只需要识别所需的父提交(可能是最初指向的master),创建新提交,以及make from tempfile import TemporaryFile f = TemporaryFile() ns = "http://www.w3.org/2000/svg" xmlgen = XMLGenerator(f) xmlgen.startDocument() xmlgen.startPrefixMapping("ns1", ns) xmlgen.startElementNS((ns, "svg"), "ns1:svg", {}) f.seek(0) print(f.read()) <?xml version="1.0" encoding="iso-8859-1"?> <ns1:svg xmlns:ns1="http://www.w3.org/2000/svg"> 指向那个,而不用打扰索引和工作树。如果你有很多这样的发布/ N项要做,这样会更快,它只是有点棘手。

答案 1 :(得分:1)

git checkout -B master release/X       # release/X is the new master version

是你想要的。当前master历史记录中的任何内容都不相关,因为您只是整个release/X

如果你真的必须保持从你的积极工作中可以获得遗弃的历史记录,

git checkout -B master release/X       # release/X is the new master version
git merge -s ours --no-ff master@{1}

但没有太多理由。你可以改为标记它,如果它甚至值得那么。