git-rebase - 如果什么都没有改变,rebase -i 会做什么?

标签 git-rebase

我注意到如果我做一个

git rebase -i HEAD~10

然后不要更改结果文件中的任何内容,仍然会执行某种 rebase 。 IE。我需要

git push origin branch --force

由于定期推送

git push origin 分支

显然会丢失历史记录!

这似乎暗示一些历史被改变了,但我不明白为什么。如果我没有选择更改任何提交(即每次提交都被选中)那么为什么历史记录会发生变化以及具体发生了什么变化?

最佳答案

如果您执行 git log --format=fuller,您会看到提交不仅跟踪作者,还跟踪提交者:

commit 0d987988ffed315ef63f79b33eae40a8715390c9
Author:     Statichippo <example@example.com>
AuthorDate: Fri Jun 22 14:09:48 2012 -0400
Commit:     Statichippo  <example@example.com>
CommitDate: Fri Jun 22 14:09:48 2012 -0400

    a commit message

当你 rebase 时,你的用户被列为新的提交者。下面是一个示例,说明如果我重新设置该代码块的基数,它会是什么样子:

commit 3e23bea3c778c66h59c5f665061e9354507b379b
Author:     Statichippo <example@example.com>
AuthorDate: Fri Jun 22 14:09:48 2012 -0400
Commit:     Jacob Angel <jangel@example.com>
CommitDate: Tue Jul 3 12:39:43 2012 -0400

    a commit message

所以可能发生的情况是,您正在 rebase 另一个人所做的提交,并且它正在更改提交和 CommitDate。显然 git 会看到一个新的散列(因为部分提交已更改)并记录更改。

关于git-rebase - 如果什么都没有改变,rebase -i 会做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11268344/

相关文章:

git 将本地提交的更改移动到新分支并推送

git - git pull --rebase 和 git pull --ff-only 的区别

git - 为什么 git rebase 覆盖我的本地更改?如何避免覆盖?

Git Rebase 期间的 Git Commit - 到底发生了什么?

git rebase "deleted by us"和 "deleted by them"

git - 在交互式 rebase 期间编写提交消息时显示差异

git - 使用 "fixup!"或 "squash!"之间有什么真正的区别吗?

git - 无法恢复的 git 推送?

git - git rebase 和 git merge --ff-only 之间有区别吗

Git - 更改分支提示以包含来自另一个分支的提交