git rebase -i HEAD~7 -- 在编辑器中仅显示“noop”

2024-02-29

我正在尝试将位于 HEAD 的提交压缩为后面的提交。当我跑步时git rebase -i HEAD~7,但是,我只看到一个noop在编辑器中!我完全不知道这是如何运作的。

我在分行工作(cleanup)我创建的(使用checkout -b cleanup ...在我发现的 SHA1 上reflog)在我有了第一次之后rebase经验和我不小心删除了所有这些提交;重点是,我不确定分支的父级是什么(如果这很重要,请在这里)。

我只是想做我已经读过很多次的事情:我想稍微修改一些不是最新提交的已提交代码。我不知道这是“压制”应用程序还是只是在达到这一点时对其进行修改。

当编辑器在运行上面所示的 rebase 命令后启动时,我也在 STDOUT 上看到了这一点:

$ git rebase -i HEAD~7
usage: git rev-list [OPTION] <commit-id>... [ -- paths... ]
  limiting output:
    --max-count=<n>
    ...

除了HEAD~7参考,我尝试指定整个 SHA1,以及本地和远程分支的不同引用规范。一切都相同的结果...

我缺少什么?感谢您的帮助!


Edit:

$ git log --oneline HEAD~7..HEAD
d0fd20e temp Fix resume_cities table
ea2ffdf Fix db/seeds.rb to reflect recent database structure modifications
dbd2b8b Add several models/scaffolds that go along with the Geonames tables
9759091 Fix name of the ResumeSkill model file.
3fc3134 Added the SHA1 for the previous commit to the comments on the migration, to help link back to that.
bacbeb2 Consolidate database migrations! READ ME!
0c49a57 Moved back to gem versions of linkedin, omniauth, and twitter

这是bacbeb2提交我想修改d0fd20e


根据@MarkLongair的建议,我添加了set -x to /usr/lib/git-core/git-rebase--interactive并看到以下奇怪的输出:

$ git rebase -i HEAD~7

[... output muted for brevity, see the full output, here: http://gist.github.com/1163118]
+ read -r shortsha1 rest
+ sed -n s/^>//p
+ git rev-list --no-merges --cherry-pick --pretty=oneline --abbrev-commit --abbrev=7 --reverse --left-right --topo-order 2c51946812a198ca908ebcad2308e4b8274624b3...d0e9ff6d9c1f8bc374856ca2a84ad52d6013b5bf
usage: git rev-list [OPTION] <commit-id>... [ -- paths... ]
  limiting output:
    --max-count=<n>
    --max-age=<epoch>
    --min-age=<epoch>
    --sparse
    --no-merges
    --remove-empty
    --all
    --branches
    --tags
    --remotes
    --stdin
    --quiet
  ordering output:
    --topo-order
    --date-order
    --reverse
  formatting output:
    --parents
    --children
    --objects | --objects-edge
    --unpacked
    --header | --pretty
    --abbrev=<n> | --no-abbrev
    --abbrev-commit
    --left-right
  special purpose:
    --bisect
    --bisect-vars
    --bisect-all
+ test t = 
+ test -s /home/ryan/Projects/social-jobs/.git/rebase-merge/git-rebase-todo
+ echo noop
[...]

我说“奇怪的输出”,因为如果我运行rev-list直接从我的 shell 命令,它按预期工作:

$ git rev-list --no-merges --cherry-pick --pretty=oneline --abbrev-commit --abbrev=7 --reverse --left-right --topo-order 2c51946812a198ca908ebcad2308e4b8274624b3...d0e9ff6d9c1f8bc374856ca2a84ad52d6013b5bf
>0c49a57 Moved back to gem versions of linkedin, omniauth, and twitter
>bacbeb2 Consolidate database migrations! READ ME!
>3fc3134 Added the SHA1 for the previous commit to the comments on the migration, to help link back to that.
>9759091 Fix name of the ResumeSkill model file.
>dbd2b8b Add several models/scaffolds that go along with the Geonames tables
>ea2ffdf Fix db/seeds.rb to reflect recent database structure modifications
>d0e9ff6 !temp Fix resume_cities table !temp

Update:在我的答案末尾有对此行为的解释,但我在这里留下了调试建议,以防它们对任何人有用。


我不确定我在这里有一个真正的答案,但我会尽我所能解释发生了什么。当调用为git rebase -i HEAD~7, git 应该只输出noop to .git/rebase-merge/git-rebase-todo如果该文件为空或不存在。我们知道这不是权限问题,因为该文件(包含“noop”和注释行)已成功创建。事实上,您看到一个错误git rev-list终端上还表明问题实际上是由于如何git rev-list被调用。在 git v1.7.4.1 中,使用您引用的命令行,应从以下内容中找到要包含的提交列表:

git rev-list --no-merges --cherry-pick --pretty=oneline --abbrev-commit \
    --abbrev=7 --reverse --left-right --topo-order HEAD~7...HEAD

请注意,这与手册页建议的内容有些不同(git log <upstream>..HEAD)因为范围使用...代替..

我猜,因为你看到了一个错误git rev-list,这是有问题的命令。你能尝试一下,看看输出是什么吗?如果这似乎有效,那么我怀疑有一个较早的错误导致该命令行格式错误。由于交互式变基是作为 shell 脚本实现的,因此您可以通过使用以下命令编辑脚本来相当轻松地调查这一点:sudo editor /usr/lib/git-core/git-rebase--interactive并添加set -x在顶部,类似:

#!/bin/sh
set -x
#
# Copyright (c) 2006 Johannes E. Schindelin

# SHORT DESCRIPTION
[...]

然后如果你尝试运行git rebase -i HEAD~7,您应该看到脚本正在运行的每个命令,并且可能会看到有什么问题git rev-list调用。

我希望这有一些帮助。


Update: It 事实证明 https://stackoverflow.com/questions/7137985/git-rebase-i-head7-showing-only-noop-in-editor/7154025#7154025这里的问题是发问者有IFS设置为仅包含制表符和换行符,而不是默认的空格、制表符和换行符。

这会导致线路出现问题git-rebase--interactive开始:

git rev-list $MERGES_OPTION --pretty=oneline [...]

... 自从MERGES_OPTION被设定为--no-merges --cherry-pick。默认值为IFS(包括空格)在变量被替换后,这将被分成两个参数。然而,随着IFS不包括空间,--no-merges --cherry-pick将被解释为single,并且显然是未知的,争论,导致git rev-list脚本中传递的使用消息和空输出。

一个很好的谜题:)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

git rebase -i HEAD~7 -- 在编辑器中仅显示“noop” 的相关文章

随机推荐

  • javascript 事件的 deviceorientation 在 chrome android 中未触发

    I am trying to fire deviceorientation event of javascript but event is not firing in my android device please check out
  • jQuery 和 Windows 8 JavaScript Metro 风格应用程序

    jQuery 可以在使用 JavaScript API 开发的 Windows 8 Metro 风格应用程序中使用吗 我正在查看示例 其中有很多标准 DOM 操作 例如document getElementById addEventList
  • 如何防止和/或处理 StackOverflowException?

    我想预防或处理StackOverflowException我从一个电话中得到的XslCompiledTransform Transform内的方法Xsl Editor我在写信 问题似乎是用户可以写一个Xsl script这是无限递归的 它只
  • 如何强制原则从数据库重新加载数据?

    我在 symfony2 1 安装中使用doctrine mongodb 1 0 0 BETA1 因此 我试图强制我的存储库从数据库调用数据 而不是使用它已缓存的对象 audit dm gt getRepository WGenSimscho
  • Javascript DOM:设置自定义 DOM 元素属性

    可以在 DOM 元素上设置自定义属性并依赖它们持续存在吗 例如 给定 div div 这样做公平吗document getElementById foo bar baz 并期望document getElementsByTagName di
  • 设置语言不起作用 select2

  • C++ 模板名称漂亮打印

    我需要打印缩进的模板名称以进行调试 例如 我想像这样缩进名称 而不是单行 boost phoenix actor lt boost phoenix composite lt boost phoenix less eval boost fus
  • opengl 中的顶点缓冲区

    我正在制作一个小型 3D 图形游戏 演示以供个人学习 我了解 d3d9 和很多关于 d3d11 的知识 但目前对 opengl 知之甚少 所以我打算抽象出图形的实际渲染 以便我的场景图和 上面 的所有内容都不需要了解如何实际绘制图形 我打算
  • 如何在 SwiftUI 中初始化 View Again?

    我在我的项目中使用 SwfitUI 并且有一个 NavigationView 和 List 我在打开详细视图后单击单元格 然后单击导航后退按钮 我想在单击导航后退按钮后删除视图 它是 SwiftUI 中的结构 因为如果我再次单击相同的单元格
  • 如何初始化共享 javascript 模块默认导出

    我想在多个模块之间共享一个 api 实例 并能够使用外部配置对其进行初始化 我的代码使用 Webpack 和 Babel 将这些漂亮的 ES6 模块转换为浏览器可用的东西 我正在努力实现这一目标 api js let api null ex
  • 解码熊猫字符

    下面是我的 DF 示例 ROLE NAME GESELLSCHAFTER DUPONT DUPONT GESCH FTSF HRER DUPONT DUPONT KOMPLEMENT R DUPONT DUPONT GESELLSCHAFT
  • 无法分配对象,因为其复制赋值运算符被隐式删除错误

    在我的小型打砖块克隆游戏中 我试图从向量中删除一些值 该向量包含 Brick 类 它们以网格状模式在屏幕上实例化 当球和砖块发生碰撞时 砖块需要消失 我正在尝试用一小段代码来完成此任务 for int i 0 i lt bricks siz
  • CAReplicatorLayer 背后的魔力是什么?

    我觉得 CAReplicatorLayer 有趣的地方是 它能够非常有效地使用不同的变换多次显示 CALayer 如何 看起来它以某种方式重用了复制层的 后备存储 甚至对其应用了一些色调 如何 我想获得源代码或了解 CAReplicator
  • CMD:将 ECHO 管道传输到 SET/在变量中扩展变量

    x 12 3 返回从 x 变量中第 12 个字符开始的 3 个字符 我一直试图完成的是使用变量而不是12 and 3 比方说y 12 and z 3 那么 你就不能使用 x y z 因为 CMD 会认为 x 是一个变量 你能做的是set v
  • IE8 中 IIS7.5 中的 ASP.NET MVC2 的会话不粘连

    我们有一个 ASP NET MVC2 Web 应用程序 由于超出本问题范围的原因 我们决定在应用程序中使用经典会话状态 其中实现了与会话相关的以下功能 global asax 中的 Session Start 事件处理程序在会话中存储变量
  • Python 获取当前 URL

    我如何使用Python获取当前URL 我需要获取当前的 URL 以便我可以检查它的查询字符串 例如 requested url URL HERE url urlparse requested url if url 4 params dict
  • 项目导入需要 Sbt 0.12.4+

    我目前正在阅读Play for Scala Covers Play 2Peter Hilton 的书 出版商 Manning 并尝试坚持他们在书中概述的版本 播放版本 2 1 1 我下载了新的 IntelliJ IDEA 14 CE 应用程
  • Facebook Android SDK 的密钥哈希无效

    我正在尝试使用 Facebook Android SDK 开发一个带有 Facebook 登录按钮的简单应用程序 但我在密钥哈希方面遇到了麻烦 我创建了调试密钥和发布密钥 调试键 keytool exportcert alias andro
  • 如何在 Firefox 中调试 Service Worker?

    在 FF 中调试 Service Worker 似乎非常痛苦 我知道从主页我可以 进入应用程序面板 点击 关于调试 在新页面中搜索我的员工以及其他 200 名员工 单击开始 然后单击检查 我必须寻找两个控制台而不是一个并通过 两者之间的消息
  • git rebase -i HEAD~7 -- 在编辑器中仅显示“noop”

    我正在尝试将位于 HEAD 的提交压缩为后面的提交 当我跑步时git rebase i HEAD 7 但是 我只看到一个noop在编辑器中 我完全不知道这是如何运作的 我在分行工作 cleanup 我创建的 使用checkout b cle