gpt4 book ai didi

git - 在 Git 中,如何在不挑剔到一个全新的分支的情况下重新设置 + 压缩一个在其历史中具有多个 merge 提交的分支

转载 作者:行者123 更新时间:2023-12-04 09:15:39 26 4
gpt4 key购买 nike

问题
我希望能够将最初从 master 分支出来的分支与 master 的多次 merge ,使其显示为 master 上的单个提交。我们这样做是为了获取开发人员的分支并在 master 中生成干净的历史记录(一旦经过测试)。
我知道如何通过从 master 的尖端(即“master”指针)创建一个新分支并对其进行挑选(根据需要解决冲突,但应该可以只使用 rebase 命令(应该不是吗?)这里的假设是 master 本身没有被重新定位。
作为示例,我想采用以下历史记录,下面与分支主
和分支涂鸦:
原史

  *  commit K, branch doodle, merge commit (conflicts)
/|
* | commit J, branch master,
| |
| * commit I, branch doodle
* | commit H, branch master
| |
| * commit G, branch doodle,merge commit (conflicts)
|/|
| * commit F, branch doodle
* | commit E, branch master
| |
| * commit D, branch doodle,merge commit (no conflicts)
|/|
* | commit C, branch master
| * commit B, Branch doodle
|/
* commit A, Branch master
并将其转换为 master 上的以下历史记录,其中 doodle 上的整个提交链被压缩并重新基于 master 的 HEAD,如下所示。由于branch doodle 的head 已经commit K 并且master 和doodle 之间的所有冲突都已解决,因此执行以下操作应该就像一个命令一样简单。它也不会与已发布的大师的历史混淆。
想要的历史
*    commit L, branch master,(squash commit B,D,F,G,I,K)
|
* commit J, branch master
|
* commit H, branch master
|
* commit E, branch master
|
* commit C, branch master
|
* commit A, branch master
另一种方法是生成下面显示的历史而不是 Squash
在 merge 回 master 之前提交 B', F', G' I', J', K'。这种方法
然而,下面似乎添加了一个额外的步骤,rebase 应该能够
处理(尽管解决了冲突)。
替代历史
| *  commit K', branch doodle (possible conflict resolution)
| |
| * commit I', branch doodle (possible conflict resolution)
| |
| * commit G', branch doodle (possible conflict resolution)
| |
| * commit F', branch doodle (possible conflict resolution)
| |
| * commit B', branch doodle (possible conflict resolution)
|/
* commit K, branch master
|
* commit H, branch master
|
* commit E, branch master
|
* commit C, branch master
|
* commit A, Branch master
我试过的
目前,我正在从主提示创建一个新分支,并挑选 B、F 和我到它上面。这有效,但比我认为必要的要复杂,因为我必须重新解决 merge 冲突。现在,我知道 --rebase-merges标志为 rebase .但是,由于某种原因,我无法获得 --rebase-merges产生“欲望历史”甚至替代历史。有可能我正在选择提交 rebase -i HEAD~N --rebase-merges不正确。
问题
如何轻松地从原始历史到想要的历史?
另外,如果原始历史中的 master 在最后一次 merge 到 doodle 之后有一些额外的提交,这种方法是否允许在 pull 入 master 之前解决冲突?

最佳答案

使用 reset --soft 很容易做到这一点

git checkout doodle
git reset --soft master
git commit -m "doodle, as a single commit"
没有麻烦。如果有更多不属于 Doodle 的 master 提交,则在执行此操作之前 merge 。

关于git - 在 Git 中,如何在不挑剔到一个全新的分支的情况下重新设置 + 压缩一个在其历史中具有多个 merge 提交的分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63234477/

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