gpt4 book ai didi

git - 让 git 只是*复制*(而不是 merge )?

转载 作者:行者123 更新时间:2023-12-03 09:17:54 24 4
gpt4 key购买 nike

我如何告诉 git“让这个分支 HEAD 看起来就像另一个分支 HEAD”?

我们有一些在 develop 上进行开发、发布分支以及尽一切努力使发布分支正常工作的历史。但我们在更新 master 方面一直很松懈。幸运的是,我们有实际发布的标签。我们现在希望将 master 设为发布版本的系列。

这不仅仅是解决“他们的”所有 merge 冲突;如果你愿意的话,我希望所有差异都能得到解决。例如,如果在 release/1 过程中,我们将 x = x + 1; 添加到 Foo.java,但从未将其添加到developrelease/2,那么当我们将 release/1 交付给 master 时,这一行应该在那里,但当我们将 release/2 交付给 master 时,它应该会消失。请理解,历史上没有任何变化可以删除这条线;它只是被添加到一个死胡同分支中。

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

最佳答案

如果我理解正确的话,您基本上希望在 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 更快地完成此操作,它通过获取给定的树 ID 和父级向存储库添加新的提交-ID。由于所需的新树与某些现有树(release/X 的树)100% 相同,因此您只需识别所需的父提交(大概是 master 最初指向的任何内容) ),创建新的提交,并使 master 指向该提交,而不用担心索引和工作树。如果你有很多这样的发布/N 项要做,这样会更快,只是有点棘手。

关于git - 让 git 只是*复制*(而不是 merge )?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35759250/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com