首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Git -如何验证git-rebase --interactive没有更改项目的最终状态

Git -如何验证git-rebase --interactive没有更改项目的最终状态
EN

Stack Overflow用户
提问于 2012-05-18 23:55:09
回答 2查看 893关注 0票数 1

我经常使用git rebase --交互式的来清理历史记录。可能会有合并冲突,或者即使没有冲突,仍然会有合并。我总是有点害怕有些东西已经改变了,即使我只是改变了提交的顺序,挤压了它们等等。

我过去经常保留我的工作树的备份副本,以便粘贴到新的树上。然后,我查看了gitg中的提交窗口,看看是否一切都一样。这是一个痛苦,但我停止了备份副本。

接下来,我创建了一个备份分支,我发现git diff backup-branch可以正常工作。

现在我尝试了:(因为我也想停止创建备份分支)

代码语言:javascript
复制
git --diff HEAD ORIG_HEAD

但这显示了更改,而当我查看我的工作目录中的文件时,它看起来没有更改。

此场景的正确命令是什么?

EN

回答 2

Stack Overflow用户

发布于 2012-05-19 02:36:08

在这种情况下,交互式的rebase从检出开始,出于某种原因,在检出之后设置了ORIG_HEAD。实际上,在rebase进行签出之前,您希望与作为头部的提交进行比较。你可以在reflog中找到它:

代码语言:javascript
复制
git reflog

查找最接近顶部的结帐,并与下一行中的提交进行比较。如果你的reflog看起来像这样:

代码语言:javascript
复制
ec4bd97 HEAD@{0}: rebase -i (finish): returning to refs/heads/big_cat_branch
ec4bd97 HEAD@{1}: rebase -i (fixup): Divide the bug class into modules
5d62142 HEAD@{2}: rebase -i (fixup): updating HEAD
c28c562 HEAD@{3}: checkout: moving from big_cat_branch to c28c562
7f6bc0e HEAD@{4}: commit: Fix bug related to big cats.

然后,您想要像这样进行不同:

代码语言:javascript
复制
git diff HEAD 7f6bc0e

代码语言:javascript
复制
git diff HEAD HEAD@{4}

除非交互式的rebase实际更改了代码中的某些内容,否则您不会期望任何输出。

如果您能从reflog中提取该条目,那就太好了,但除了让ORIG_HEAD (使用git rev-parse ORIG_HEAD)指向提交,在reflog中获取提交,并查看以下行之外,我不知道有什么简单的方法。您可以编写一个脚本来执行此操作,但手动找到它并不难。

(您可能认为ORIG_HEAD^会给您想要的东西,但在提交历史记录中,这给了您在提交历史记录中ORIG_HEAD之前的提交,而不是在本地reflog中。您想要后者。)

票数 2
EN

Stack Overflow用户

发布于 2012-05-19 00:37:24

我个人喜欢git log -p。我展示了每次提交的不同之处,包括合并。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10655873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档