【问题标题】:How to rebase all the commits from the beginning如何从头开始重新设置所有提交
【发布时间】:2012-01-26 04:29:48
【问题描述】:

所以我正在从 svn (code.google.com) 迁移到 git(github)。

我已经从 svn repo 导入了我的项目,并且它导入了所有的提交历史。 我并不为那些 cmets 感到骄傲,因为这是我的第一个项目之一,不是很认真。

我想将所有内容重新设置为一个“初始导入”提交。

我已经在我的电脑上提取了所有内容,我正在尝试这样做。但我发现的只是: git rebase -i master 但它只会重新定义新的修改和提交。

如何使用变基从所有历史记录中清除我的 github 存储库?

【问题讨论】:

标签: git github


【解决方案1】:

git rebase -i --root 将从头开始对所有提交进行交互式变基。

从那里,您可以将所有提交压缩为一个和/或执行其他编辑。

【讨论】:

  • 哇,这救了我的命!我想保留小提交消息以完善最终的初始提交,这开箱即用。我很高兴我一直在滚动。
【解决方案2】:

如果你愿意,你可以 rebase 和 squash 一切(除了初始提交),但何必呢?只需删除您的 .git 目录,运行 git init 重新创建它,运行 git add 一切,然后运行 ​​git commit 进行新的初始提交。

【讨论】:

  • 实际上 - 对于仅捆绑单个提交,您的答案是更好的。我会留下我的,只是为了表明你可以指定一个提交来开始变基。
  • 注意删除.git也会删除你的钩子和其他配置,如果你有的话。
【解决方案3】:

Jefromi 的回答会起作用,但如果您想保留现有的 repo 配置,或者为了以防万一,甚至放弃提交,您可以执行以下操作:

git checkout master

git branch backup 可以选择在此处留下另一个分支,以防您想保留历史记录。

git reset --soft $SHA_OF_INIT_COMMIT 这将更新 HEAD 指向的内容,但将您的索引和工作目录保持在当前状态。您可以使用git log --pretty=format:%h --reverse | head -n 1 获取SHA,并使用git reset --soft $(git log --pretty=format:%h --reverse | head -n 1) 完成这一步骤

git commit --amend 将您的初始提交更改为指向您的 repo 的当前状态。

【讨论】:

  • 正如this answer 中所指出的,您不应该使用 git log 编写脚本。你最好使用git rev-list --max-parents=0 HEAD - 但我仍然喜欢你的答案是最好的。 :) 逻辑是:1)移动 master 指向第一个提交,2)更改该提交以保存我现在工作目录中的内容,3)瞧!新的初始提交,所有更改都整齐地压缩在一起:)
  • @JohnySkovdal 该答案说改为使用“具有指定自定义格式的 git-log”,我正在这样做,不是吗?
  • 该死,不知何故错过了那部分。阅读它,因为无论参数如何, git log 都不好。 Nvm我然后。 :$
【解决方案4】:

abcd12 中找到您要开始压缩的提交的哈希,然后专门针对该哈希进行变基。

git rebase -i abcd12

您正在使用master 进行变基,它针对主分支的尖端执行变基。

【讨论】:

  • 它适用于历史记录,但每个文件旁边的消息仍然显示之前的提交消息。
  • 你真的压缩了文件吗?它提供了一个创建新提交消息的选项。
  • 是的,除了第一次提交之外,我确实压缩了所有内容。我已经删除了所有提交消息。我在 github 历史中看到它没问题,但不是在单个文件上。也许这是来自github的缓存问题。无论如何,谢谢,我最终初始化了一个新的仓库。
  • 如果您不想破坏所有历史记录,这当然是正确的答案!不幸的是,由于 Git 的思维方式,您实际上无法将其全部压缩到初始提交中。你会留下第一个,然后一个被压扁。 (它也更慢,因为它必须单独应用每个提交。)
【解决方案5】:

如果您想将所有历史记录减少到一个“初始导入”提交,只需删除 .git 目录并创建一个新的本地存储库(保留旧存储库的备份) . git init . && git add . && git commit -m "Initial import".

此类新存储库与您推送到 GitHub 的存储库没有共同祖先,因此您必须git push --force您新创建的存储库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-14
    • 1970-01-01
    • 1970-01-01
    • 2013-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-09
    相关资源
    最近更新 更多