gpt4 book ai didi

git - 在 git 中 merge 拆分历史记录

转载 作者:行者123 更新时间:2023-12-03 09:31:19 27 4
gpt4 key购买 nike

我一直在玩 rebase ,尝试拆分和 merge 历史记录,如下所述:
https://git-scm.com/book/en/v2/Git-Tools-Replace

这是我的带有拆分历史记录的测试存储库:
https://github.com/defufna/split-history



请注意,“初始提交”和“添加描述”提交都指向同一棵树。我要做的是 merge 这两个历史记录(同时保持 merge )。我用过这个:

git rebase --rebase-merges --onto history 94da9b0f

这有效,但我在 084dae5 遇到冲突。这是一个解决修改/删除冲突的 merge ,它需要我手动解决这个冲突。

我这样做是为了准备更大的 repo merge ,在那里我将不得不做类似的事情,但有 50k 次提交,所以我想避免手动解决冲突。
我知道 git replace 可以解决我的问题,但我很好奇是否可以在不替换的情况下做到这一点。我还想在历史分支中保留提交的 sha 值。

编辑:

所以我已经设法做我想做的事,但我不确定这个想法有多好。
我已经添加了 -i 到 rebase,当我得到 todo 文件时,我已经改变了每个
merge -C 9751be2 Merge # Merge

线入:
exec git checkout `git commit-tree '9751be2^{tree}' -p HEAD -p refs/rewritten/Merge -m Merge`

我基本上是在遇到 merge 时告诉 git 重用原始 merge 中的树。

它按预期工作(目前),但速度要慢得多。有一个更好的方法吗?

最佳答案

Note that "initial commit"[94da] and "Added description"[c00e] commits both point to the same tree



Is there a better way to do this?



很多。
git replace --graft 94da c00e^
git filter-branch master

你就完成了。
git rebase存在以将更改重新应用于不同的基本内容,从而生成具有新内容的快照。你已经拥有了你想要的所有快照,你只需要重新连接祖先。 git replace --graft在本地做,让你随便试验。 git filter-branch存在以在应用任何 super 简单的内容更改的同时烘烤重新布线的祖先 - 但您甚至没有任何这些。您只想重新连接 master历史。

关于git - 在 git 中 merge 拆分历史记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60171031/

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