git rebase重新散列未触及的提交 处境
这些是我的分支中的提交散列。推送提交是public master的一部分,public master是我分支的基础。其他提交尚未发布git rebase重新散列未触及的提交 处境,git,rebase,Git,Rebase,这些是我的分支中的提交散列。推送提交是public master的一部分,public master是我分支的基础。其他提交尚未发布 PUSHED_A - PUSHED_B - mywork_A - mywork_B - correction_A 现在我使用了git-rebase-I来重新排序并将更正内容压缩到我的工作中。 我理解为什么mywork_A和mywork_B在重定基址后有一个新的提交哈希 但现在,即使是Push_B也有了一个新的散列。散列现在看起来像这样 PUSHED_A - PU
PUSHED_A - PUSHED_B - mywork_A - mywork_B - correction_A
现在我使用了git-rebase-I
来重新排序并将更正内容压缩到我的工作中。我理解为什么mywork_A和mywork_B在重定基址后有一个新的提交哈希 但现在,即使是Push_B也有了一个新的散列。散列现在看起来像这样
PUSHED_A - PUSHED_B2 - mywork_A2 - mywork_B2
我担心这会使我的分支很难正确地合并到公共主分支中,因为pushd_B2未被识别为alread现有pushd_B,并且会导致问题
我纠正了(新的分支,樱桃采摘…),但我不理解背景
为什么会这样?
我查看了PUSHED_B和PUSHED_B2的提交内容。没有区别
可能是我在做重基时把push_B带到了提交列表中,选择HEAD~x太大了。但是我没有修改这个提交,也没有在它之前重新排序。所以,即使它是列表中提交的一部分,它不应该保持原样吗
我可以追溯发生了什么以及什么时候发生的吗?当您重新设置基础时,它会更改“提交者”和重新设置基础的提交日期,因此有一个新的哈希
最简单的方法是使用正确的提交范围重新设置上游的基础。在这种情况下,git将检测到push_B和push_B2具有相同的内容,并将跳过后者。当您重新设置基址时,它会更改“提交者”和重新设置基址的提交日期,因此有一个新的哈希 最简单的方法是使用正确的提交范围重新设置上游的基础。在这种情况下,git将检测到pushd_B和pushd_B2具有相同的内容,并将跳过后者。注意,一些形式的git rebase试图注意到可以重用特定的现有提交,然后将重用该现有提交(通过“快进”)。如果您不希望发生这种情况,
git-rebase
提供了禁用它的选项。其他形式的git-rebase
对此不太小心:实际上,这些选项始终处于启用状态。似乎您使用了不太小心的重基形式
其中提到了三种“后端”内部实现:am(使用git格式补丁
和git am
来完成复制,而不是cherry pick提交)、merge(使用cherry pick)和interactive(它使用cherry pick,但首先生成一个可以编辑的指令表,并且非常有趣):
- am后端是不太仔细的表单,也是默认的
- 如果提供了
、-m
或-s
选项,则前端-X
命令将切换到合并后端git-rebase
- 如果使用
,前端-i
命令将切换到交互式后端git-rebase
-p
选项用于我们的交互式后端,但不是交互式的,也许现在仍然是;-r
或-rebase merge
也可能是这样。很明显,that既不使用旧的am后端,根据文档中的描述,-k
也不能使用am后端
正如您所做的那样,您可以重新设置基址,将两个必须是不同的提交放回原始提交序列的顶部。或者,您也可以手动使用git cherry pick
,这使您能够完全控制每一步,但代价是需要完全控制每一步。:-)请注意,git-rebase的某些形式试图注意到可以重用特定的现有提交,然后将重用该现有提交(通过“快进”)。如果您不希望发生这种情况,git-rebase
提供了禁用它的选项。其他形式的git-rebase
对此不太小心:实际上,这些选项始终处于启用状态。似乎您使用了不太小心的重基形式
其中提到了三种“后端”内部实现:am(使用git格式补丁
和git am
来完成复制,而不是cherry pick提交)、merge(使用cherry pick)和interactive(它使用cherry pick,但首先生成一个可以编辑的指令表,并且非常有趣):
- am后端是不太仔细的表单,也是默认的
- 如果提供了
-m
、-s
或-X
选项,则前端git-rebase
命令将切换到合并后端
- 如果使用
-i
,前端git-rebase
命令将切换到交互式后端
大约一年前,在Git中,rebase主要以shell脚本的形式编写,更容易判断哪个rebase做了什么。新的版本是C语言,更加不透明。-p
选项用于我们的交互式后端,但不是交互式的,也许现在仍然是;-r
或-rebase merge
也可能是这样。很明显,that既不使用旧的am后端,根据文档中的描述,-k
也不能使用am后端
正如您所做的那样,您可以重新设置基址,将两个必须是不同的提交放回原始提交序列的顶部。或者,您也可以手动使用git cherry pick
,这使您能够完全控制每一步,但代价是需要完全控制每一步。:-)在我的例子中,“使用正确的提交范围重新设置上游基础”是什么样子?我仍然不熟悉rebase。如果您设置了默认分支,那么git fetch;git rebase
通常会起到神奇的作用。在这种情况下,git-rebase-push\u B
应该执行以下操作