【问题标题】:Is it possible to remove all my commits and maintain only the last one是否可以删除我的所有提交并仅保留最后一个
【发布时间】:2012-07-17 12:28:13
【问题描述】:

我已尝试遵循在其他类似主题中找到的一些建议,尝试重新提交我的提交:

git rebase --onto master~5 master~1 master

但我没有得到我想要的(但这可能是由于我的无能)。

现在,我想要删除所有提交并仅维护文件的最后一个版本,就像我删除我的文件并第一次再次发布它一样。

我想删除对一些要点的提交;真的,我只对最后一个版本感兴趣。

真的,我想使用像 pastebin 这样的 gist,不保存修订,只保留最终版本。

我知道我可以删除我的要点并创建另一个要点,但如果可能的话,我更喜欢链接不变。

【问题讨论】:

  • 我将使用交互式 rebase git rebase -i COMMIT 重写自 COMMIT 以来的历史记录。但我不确定你是否可以更改 github gists 的提交历史。

标签: git command-line github


【解决方案1】:

如果您尝试仅丢弃单个文件的所有先前历史记录,并且该文件用于修改其他文件的提交,则rebase(可能)是必要的。如果您只想丢弃整个存储库的所有历史记录,这里有两个选项:

将 HEAD 设置为以当前工作目录为树的新的无父提交(git checkout 有一个类似的 --orphan 选项):

$ TREE=$( git show -s --format='%T' HEAD )
$ HEAD=$( echo initial commit | git commit-tree $TREE )
$ git reset $HEAD

完成此操作后,之前的所有提交仍可作为对象访问,但您必须努力获取它们。如果您有引用它们的分支和/或标签,它们将持续存在,但如果它们未被引用,它们最终将被垃圾收集器丢弃。

或者,干脆清除 git repo 并重新开始:

$ cd $( git rev-parse --show-cdup )   # Go to top level directory
$ rm -rf .git
$ git init
$ git add .

【讨论】:

  • 这或多或少是我要做的。我喜欢“将其重置为已知树”的方法
  • 谢谢,这就是我想要的,我知道我在以一种奇怪的方式使用 git
猜你喜欢
  • 1970-01-01
  • 2018-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-14
  • 2012-06-04
  • 2013-02-13
相关资源
最近更新 更多