首页 文章

如何从github仓库的特定子目录中删除旧的提交历史记录?

提问于
浏览
1

我不是使用git / github的专家,很抱歉我可能没有正确的条款 .

前提:我正在开发一个github仓库(第三方主仓库的一个分支)创建/更新一些文件(降价文件全部包含在子目录 path/to/wiki 上) .

因此,直接在github web界面上工作(因为我需要观察和升级.md文件,查看Web渲染文档的视觉效果),我在github页面上直接完成了很多"micro"提交:https://github.com/solyaris/ChatScript/tree/master/wiki

问题:现在我完成了所有更新,并且我想做一个 pull request 到外部主仓库,完成工作,可能避免分享无用的"commit story"数十次提交更新...

So for each .md file on the wiki directory, I'd like to send just the FINAL result release of editing (and not all the commit story).

也许这个git选项叫做“rebase”?无论如何,我不知道究竟是什么意思“修剪” .

我不可能删除特定目录中包含的旧提交(仅保留最终结果),或仅删除特定文件(例如,这个:https://github.com/solyaris/ChatScript/blob/master/README.md)?

顺便说一下,有一种方法可以直接在github页面上做到这一点吗?

或者我必须在我的电脑上克隆回购

$ git clone https://github.com/solyaris/ChatScript
$ git ... # commands to delete commit history
$ git push to github

2 回答

  • 0

    顺便说一句,也许我发现自己是一个解决方案(抱歉回答自己) .

    如果我很好理解阅读这个github帮助文档:

    https://help.github.com/articles/about-pull-request-merges/

    当在github web界面上合并拉取请求时,主仓库所有者能够使用“ squash ”标志,这似乎完全符合我的要求(接受只保留一次提交的更新,而不是完整的提交故事) ) . 这解决了我的问题!

    那是对的吗?

  • -3

    你想做的是不好的做法 . Git旨在保留所有疯狂的修订版本并将其他人发布给其他人使用(排除一些或构建在其上) . 它's up to maintainers if they want to include your craziness in their commit logs, and if they don'然后它就像 git pull --squash <remote> <refspec> 一样简单

    但我会以任何方式回答你的问题


    不,那不是你想要做的 . 相反,您应该在本地存储库上启动一个新分支,并在一次提交中将所有更改放在其上

    git checkout -b changes-for-pr master
    git diff master..branch-with-my-work-so-far -- path/to/subdirectory | git apply
    git add .
    git commit
    

    顺便说一句:GitHub虽然很适合托管,但对于Git来说是一个非常糟糕的前端 . 即使是Linus Torvalds(Git的创造者)也会抨击它 .

相关问题