Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
git rebase重新散列未触及的提交 处境_Git_Rebase - Fatal编程技术网

git rebase重新散列未触及的提交 处境

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

这些是我的分支中的提交散列。推送提交是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 - 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
    命令将切换到交互式后端
大约一年前,在Git中,rebase主要以shell脚本的形式编写,更容易判断哪个rebase做了什么。新的版本是C语言,更加不透明。
-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
应该执行以下操作