git rebase--我的哈希值意外不匹配

git rebase--我的哈希值意外不匹配,git,Git,1为什么不给我一个机会,让我在与团队合并之前,将我的提交分阶段进行,以便将它们梳理成不同的提交? 2为什么重基之前的哈希值不等于重基之后的哈希值?我没有看到任何消息表明有被挤压的空白或其他东西 GIT [work] git log --oneline -n10 7784ea8 dataloader populates with relatively sane data for masteritem and event; some component changes 1d9b3fe master

1为什么不给我一个机会,让我在与团队合并之前,将我的提交分阶段进行,以便将它们梳理成不同的提交? 2为什么重基之前的哈希值不等于重基之后的哈希值?我没有看到任何消息表明有被挤压的空白或其他东西

GIT [work]  git log --oneline -n10
7784ea8 dataloader populates with relatively sane data for masteritem and event; some component changes
1d9b3fe masterlist, promote draft, various commands, display tweaks on all components
76bea59 display strings
...
GIT [work]  git rebase -i team
编辑第一次提交,挤压下两次提交

Stopped at 76bea59... display strings
You can amend the commit now, with

        git commit --amend

Once you are satisfied with your changes, run

        git rebase --continue

PS [55] git status
# Not currently on any branch.
nothing to commit (working directory clean)
PS [56] git rebase --continue
[detached HEAD e373567] display strings
 49 files changed, 917 insertions(+), 460 deletions(-)
 delete mode 100644 source/...
 delete mode 100644 source/...
 delete mode 100644 source/...
 ...
Successfully rebased and updated refs/heads/work.
GIT [work]  git log --oneline -n10
e373567 display strings
bddc2fe unit test for object attrs, verify repeating in framework
548e1e9 sync with cvs; fixed test case compile error

Rebase创建全新的提交,这意味着新的提交ID。这就是为什么你不应该在任何公开可用的东西上使用rebase,因为你的rebase会破坏其他人的存储库


从评论中。。。提交ID是提交状态和提交元数据(包括父ID)的哈希。一旦更改提交中的任何元数据,其所有子体都将受到影响。在您描述的案例中,我希望您的旧头和新头具有相同的树ID,因为它们不表示内容更改,但由于提交图已更改,因此提交ID仍然不同。

Rebase创建全新的提交,这意味着新的提交ID。这就是为什么你不应该在任何公开可用的东西上使用rebase,因为你的rebase会破坏其他人的存储库


从评论中。。。提交ID是提交状态和提交元数据(包括父ID)的哈希。一旦更改提交中的任何元数据,其所有子体都将受到影响。在您描述的例子中,我希望您的旧头和新头具有相同的树ID,因为它们不表示内容更改,但由于提交图已更改,提交ID仍然不同。

因此我明白了为什么rebase没有给我编辑的机会-我想在git rebase之后立即执行的操作-我的团队是git reset HEAD ^1;git add-p将我的大提交梳理成更小的块


所以我明白了为什么重设基址没有给我一个编辑的机会——在git重设基址之后我想做的事情——我的团队是git reset HEAD ^1;git add-p将我的大提交梳理成更小的块


你在评论中写道:


我想说的是,我的OP中的rebase的净结果没有变化,因此,尽管rebase按定义不保留提交历史,但碰巧旧头的sha1哈希和新头的sha1哈希预期是相同的,尽管是单独的提交,因为它们的文本内容完全相同

提交的哈希值取决于:

此提交的树,即源的当前状态 提交的任何父级的哈希 提交元数据的作者日期、作者、提交日期、提交者、提交消息等。
在你的重设基础后,第一个是相同的,也许我甚至不确定最后一个,至少部分是相同的。但第二个肯定不一样,因此您会得到另一个提交ID。这是一件好事,因为它允许您在存储库中同时拥有原始提交和新提交。

您在评论中写道:


我想说的是,我的OP中的rebase的净结果没有变化,因此,尽管rebase按定义不保留提交历史,但碰巧旧头的sha1哈希和新头的sha1哈希预期是相同的,尽管是单独的提交,因为它们的文本内容完全相同

提交的哈希值取决于:

此提交的树,即源的当前状态 提交的任何父级的哈希 提交元数据的作者日期、作者、提交日期、提交者、提交消息等。
在你的重设基础后,第一个是相同的,也许我甚至不确定最后一个,至少部分是相同的。但是第二个肯定不一样,因此您会得到另一个commit-ID。这是一件好事,因为它允许您在存储库中同时拥有原始和新的commit。

对,但在这种情况下,rebase实际上没有做任何事情,所以我希望最终的哈希是等效的,因为内容没有改变。任何中间提交都会有新的哈希值。这就是rebase的工作原理。如果只想对分支的一部分重设基础,可以使用rebase-ON。虽然我很确定-On不能与interactive一起工作,但我想说的是,我的OP中的rebase的净结果没有变化,因此,即使根据定义rebase不会保留提交历史,但碰巧旧头的sha1哈希和新头的sha1哈希是相同的,尽管是单独的提交,但由于它们的文本内容完全相同,因此提交ID是提交状态和提交元数据(包括父ID)的散列。一旦更改提交中的任何元数据,其所有子体都将受到影响。在您描述的例子中,我希望您的旧头和新头具有相同的树ID,因为它们表示没有内容更改,但由于提交图已更改,所以仍然具有不同的提交ID
.是的,但在本例中,rebase实际上没有做任何事情,所以我希望最终的散列是等效的,因为内容没有改变。任何中间提交都会有新的哈希值。这就是rebase的工作原理。如果只想对分支的一部分重设基础,可以使用rebase-ON。虽然我很确定-On不能与interactive一起工作,但我想说的是,我的OP中的rebase的净结果没有变化,因此,即使根据定义rebase不会保留提交历史,但碰巧旧头的sha1哈希和新头的sha1哈希是相同的,尽管是单独的提交,但由于它们的文本内容完全相同,因此提交ID是提交状态和提交元数据(包括父ID)的散列。一旦更改提交中的任何元数据,其所有子体都将受到影响。在您描述的案例中,我希望您的旧头和新头具有相同的树ID,因为它们表示没有内容更改,但由于提交图已更改,提交ID仍然不同。您确定知道如何使用交互式重基吗?你确定你知道如何使用交互式重基吗?为什么让原创和新创意都成为一件好事?你能解释一下哪个用例利用了这一点吗?我认为重复回购不是一件好事。原来的承诺在重新基准后仍然存在?如果我使用git日志,我看不到它。你是说有某种方法可以访问在rebase之前存在的原始提交吗?@faizal rebase会创建新的提交,而不会将旧的提交作为存储。git日志只显示命名提交或当前头提交的所有提交,如果没有,那么默认情况下不会显示。为什么有原始提交和新提交是一件好事?你能解释一下哪个用例利用了这一点吗?我认为重复回购不是一件好事。原来的承诺在重新基准后仍然存在?如果我使用git日志,我看不到它。你是说有某种方法可以访问在rebase之前存在的原始提交吗?@faizal rebase会创建新的提交,而不会将旧的提交作为存储。git日志只显示命名提交或当前头提交的存储,若并没有,则默认情况下不显示。