gpt4 book ai didi

git rebase -i HEAD~7 -- 在编辑器中只显示 "noop"

转载 作者:IT王子 更新时间:2023-10-29 00:51:47 25 4
gpt4 key购买 nike

我正在尝试将位于 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,以及本地和远程分支的不同 refspecs。一切都得到相同的结果...

我错过了什么?感谢您的帮助!


编辑:

$ 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 commit 我想修改 d0fd20e


根据@MarkLongair 的推荐,我添加了 set -x/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

最佳答案

更新:在我的回答末尾有对此行为的解释,但我已将调试建议留在这里以防它们对任何人有用。


我不确定这里是否有真正的答案,但我会尽我所能解释发生的事情。当调用为 git rebase -i HEAD~7 , git 应该只输出 noop.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 的错误,这是有问题的命令。你能试一下,看看输出是什么吗?如果这似乎有效,那么我怀疑有一个较早的错误导致此命令行格式错误。由于交互式 rebase 是作为 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 有什么问题。调用。

希望对您有所帮助。


更新:turns out that这里的问题是提问者有IFS设置为仅包含制表符和换行符,而不是默认的空格、制表符和换行符。

这会导致 git-rebase--interactive 中的行出现问题开始:

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

... 自 MERGES_OPTION设置为 --no-merges --cherry-pick .默认值为 IFS (其中包括空格)这将在变量被替换后拆分为两个参数。但是,使用 IFS不包括空格,--no-merges --cherry-pick将被解释为单个,显然是未知的参数,导致 git rev-list用法消息和空输出在脚本中传递。

一个很好的谜题:)

关于git rebase -i HEAD~7 -- 在编辑器中只显示 "noop",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7137985/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com