git 交互式变基(reword)失败 - 更改顺序,丢失提交

问题描述 投票:0回答:1

我想重命名第三个最新的提交并使用

git rebase
添加5个字符,但结果完全失败。 顺序发生了变化,一些提交似乎被跳过了。

我执行命令:

git rebase -i HEAD~5
然后 vim 编辑器打开并显示一些提交,左侧带有“pick”一词。 这里已经存在一个问题 - 提交不是按时间顺序的,顺序是错误的。 它确实包括我想要更改的提交。但前两次提交是从 9 月 4 日开始的,接下来的 2 次提交是从 8 月 24 日开始的(很久以前),第五次提交(我想更改)是从 9 月 5 日开始的。

我在要更改的提交处将“pick”更改为“reword”,然后使用

wq
保存并退出。 之后编辑器不再打开让我编辑提交消息。相反,它说

"interactive rebase in progress; onto 23lkj4
last commands done (4 commands done): 
pick 234lkj (some message)
reword 53k2k3(some long message)
no commands remaining.
(some more info)
The previous cherry-pick is now empty, possibly due to conflict resolution¨
(some more info)
Could not apply 53k2k3... (long commit message)

所以它没能做到“改写”。 那我就可以做

git rebase --continue.

为了说明结果如何,我在这里有一个提交示例列表,这将是执行

git log --oneline
before 变基的结果,其中最新的提交是最上面的。在每个提交的右侧,我添加了执行变基和执行 git log --oneline 之后
获得的顺序。所以“1”是最上面的(最新的)

(original commit log list)                                            resulting order after rebase

kjh23h Merge branch 'something' into 'something'                             gone?
23mk54 some commit with a a long commit message , from 5th september         1
13w354 some commit with a a long commit message                              gone?
6224nj  Merged in some branch                                                gone?
175234nj  Merged in some branch                                              4
45234nj  Merged in some branch                                               5

(21 more commits)                                                            6,7,8,etc

4782hjs some commit from 24th august                                         2
98234jd some commit from 24th august                                         3
(other commits)

怎么会出错,可能是什么问题?

git rebase
1个回答
0
投票

主要问题是您对 git 预期如何运行的理解。基本上,您应该(仔细)阅读一些有关基本操作的文档和/或教程。交互式变基非常基本,尽管不是像“git init / clone / commit / checkout”这样的最基本的操作之一

我会指出你问题中所表现出的具体误解:

  1. git 呈现为“--interactive”的“待办事项”列表是按祖先顺序排列的提交列表,最早的(按祖先关系,即父子)在前。年表根本不重要。当您保存此“待办事项”配方中剩下的内容时,git 将按照确切的顺序执行该操作。
  2. 失败的并不是“改写”,而是提交是“空”的,根本不会被提交,因此不需要改写。您删除的一些信息告诉您如果想保留空提交该怎么做,这将允许您添加空提交并重写提交消息。
  3. 如果该提交现在为空,可能是因为一两个合并提交被删除,如手册页中记录的
,这解释了为什么您使用 HEAD~5 而不是 HEAD~3,这将是重写“

”所需的参考第三次最新提交”。 怎么会出错呢?

这是一个很好的问题。答案是某些“根本性”的东西是错误的。不阅读屏幕上的说明或rebase

手册页是基本问题。

您在这个问题上获得的反对票毫无疑问是因为您在寻求帮助之前没有做足够的事情来帮助自己。
    

© www.soinside.com 2019 - 2024. All rights reserved.