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

时间:2016-08-26 17:54:28

标签: git github rebase pull-request github-flavored-markdown

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

前提: 我正在开发一个github仓库(第三方主仓库的一个分支)创建/更新一些文件(所有文件都包含在子目录path/to/wiki中)。

所以,直接在github网页界面上工作(因为我需要观看和升级.md文件,查看网页渲染文档的视觉效果), 我在github页面上直接做了很多“微观”提交:https://github.com/solyaris/ChatScript/tree/master/wiki

问题: 现在我完成了所有更新,我想对外部主仓库做pull request,完成工作,可能避免分享数十次提交更新的无用“提交故事”......

因此,对于wiki目录中的每个.md文件,我只想发送编辑的最终结果版本(而不是所有提交故事)。

也许这个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 :(得分:0)

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

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

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

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

那是对的吗?

答案 1 :(得分:-3)

你想做的是不好的做法。 Git旨在保留所有疯狂的修订并将其他人发布给其他人使用(排除一些或构建在其上)。如果他们想在你的提交日志中包含你的疯狂,那么这取决于维护者,如果没有,那么它就像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的创造者)也会抨击它。