【问题标题】:How do I git rebase the first commit?我如何 git rebase 第一次提交?
【发布时间】:2014-04-10 15:35:09
【问题描述】:

我使用git init 创建了一个新的仓库,然后提交了三个。现在我想重新定位以返回并修改我的第一个提交,但如果我这样做 git rebase -i HEAD~3 它会抱怨!如果我对HEAD~2 尝试相同的操作,那么它会起作用,但只能让我重新排列最后两个提交。

如何引用“有任何提交之前的提交”或返回并插入一个空提交?

【问题讨论】:

标签: git git-rebase


【解决方案1】:

简单的方法,使用足够新的 git(这已经很久了,所以你应该有这个):

git rebase -i --root

另一种简单的方法,如twalberg noted in a comment,是使用git checkout --orphan 设置进行新的根提交,您可以在其上复制旧提交。 (这就是 rebase -i --root 最终在内部做的事情。)

【讨论】:

  • 使用git rebase -i --root 尝试压缩第二次提交时出现错误error: cannot 'fixup' without a previous commit(我只想要第一次)
  • 您在说明书中具体编辑了什么?您应该有一个提交列表,最旧的在顶部,每个提交都有命令pick。将 second pick 更改为 squash 或 fixup,写出指令表,退出编辑器,Git 应该会完成这项工作。
  • 这对我来说也很糟糕。这适用于哪个版本的 git?
  • @Jason:它从 1.6.2 或 1.7.12 开始存在(基本的 --root 与 Git 1.6.2 一起使用,改进的版本在 1.7.12 中使用)。 “炸毁”是什么意思?
  • 在用不同的策略放屁 20 分钟后,错误自行清除。不幸的是,我丢失了确切的信息。关于待办事项。
【解决方案2】:

torek's answer 如果您想对已经在提交中的文件进行更改、编辑作者/消息等,那很好。但是如果您想拆分提交或类似的东西,那么您很可能是会遇到麻烦,因为您不能从初始提交中执行git reset HEAD~。

为此,您可以像这样插入一个空的初始提交:

git checkout --orphan empty-initial-commit
git commit --allow-empty -m 'Empty initial commit'
git checkout <branch>
git rebase empty-initial-commit
git branch -d empty-initial-commit

然后你可以做git rebase -i,编辑提交(第一个非空提交),然后像平常一样做git reset HEAD~。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-04
    • 2011-12-07
    • 2019-11-17
    • 2017-10-05
    • 2013-01-13
    • 2017-04-14
    • 1970-01-01
    • 2018-12-26
    相关资源
    最近更新 更多