1

我有一个提交历史,例如: 在此处输入图像描述,并且我希望它类似于在此处输入图像描述. 编辑:历史从底部开始,顶部是较新的提交。

我想把rebase/squash所有这些提交到“这里”。或者“这里”之前的那个也是可以接受的。

编辑:我所做的是:

  1. 我现在在提交“A”
  2. git rebase -i here
  3. 将单词设置为“squash”,保持第一个“pick”不变
  4. 它说error: could not apply c148 ...

奇怪的是,在第 2 步之后,弹出的编辑器git rebase只列出了蓝线的提交,而红线的提交不存在。

我应该如何解决这个问题?

PS:我认为这个答案可能有用。任何人都可以做一个图形解释吗?

4

3 回答 3

0

您可以像这样使用交互式变基:

git rebase -i here^

在弹出的编辑器中,将pick每次提交前的文本更改为s. 只保留最上面的 commit( here) 不变——它需要有pick.

于 2013-02-18T09:47:19.513 回答
0

您的历史从顶部开始?将您的分支重新定位到“这里”应该可以工作。也许你应该跳过两个已经合并的提交。

如果这不起作用,我们需要更多细节。特别是你图片中的哪个提交是c148 ......


关于您的链接,您也可以在“这里”创建一个新分支,然后挑选您的功能分支的四个剩余提交。


编辑:

当您想要将所有提交压缩到“此处”之外,您必须检查您的主分支(或其他分支)并以交互方式将其重新定位到“此处”。在编辑器中为壁球选择“s”。

git checkout master
git rebase -i here

PSS抱歉添加答案,只是将我所有的声誉都花在我自己的问题上,并且不再允许发表评论。

于 2013-02-18T08:35:14.210 回答
0

重新调整合并提交将是一件无聊的事情。我想git reset会更方便。

尝试这个:

git reset --hard A
git reset --soft here
git commit -m -C here  // assume this is new-A

正如您在评论中所说,假设您在 A 之后有几个新提交,现在Bmaster分支中。

然后您可以执行以下操作:

git rebase --onto new-A A B
git checkout master
git reset --hard HEAD@{1}
于 2013-02-18T10:51:26.933 回答