我们使用git进行源代码控制。每次开发人员提交时,脚本都会修改构建文件并检入文件。该脚本使用遵循模式的消息向构建文件提交。因此,提交历史记录如下:
我想要做的是删除脚本的所有提交。现在,显然,这与删除特定提交非常不同。
我可以通过从现有存储库复制来自由创建一个全新的存储库,但我仍然希望保留"开发人员的提交历史记录"尽可能地摆脱"脚本的提交历史记录"。
这可能吗?
注意 - "脚本的提交"仅更改了此单个文件(即构建文件),并且未更改任何其他文件。而且,没有"开发者的承诺"曾经改变过这个特定的文件。
到目前为止,我一直在做的是运行" bfg工具"从git repo中删除该特定的构建文件。只有来自脚本的提交才更改了构建文件,所以我希望通过删除构建文件,相关的提交将被git压掉。
但是,我发现的是:构建文件已经消失,但所有提交都被保留了,而那些提交,奇怪的是,有#34; 0更改"。
所以我的下一个问题是:是否有可能要求git删除提交" 0更改"?
答案 0 :(得分:0)
您可以使用git filter-branch
。一种简单的方法是,如果您的脚本具有唯一的作者名称。然后你可以做类似的事情:
git filter-branch --commit-filter '
if [ "$GIT_AUTHOR_NAME" = "Script Person" ];
then
skip_commit "$@";
else
git commit-tree "$@";
fi' HEAD
这几乎完全在手册页之外。如果还有其他一些内容可以将您的脚本唯一标识为提交者,则可以检查一些不同的变量。
答案 1 :(得分:0)
最近,我遇到了同样的问题,我的拉请求有41次提交。我只会触及我所实施的内容。
例如,如果您有3次提交,则可以使用交互式rebase将它们压缩并合并为一次。见下面的命令:
$ git rebase -i HEAD~n
例如,您想要压缩3个提交:
$ git rebase -i HEAD~3
现在,您将看到一个交互式rebase界面,您可以在第一次提交时编写reword / pick并在其余部分中进行压缩。请参阅此视频以便更好地理解。
这很容易,不会花费更长的时间。我努力了。
答案 2 :(得分:0)
是的,git filter-branch有一个选项来修剪最终为空的提交。检查其联机帮助页以获取确切的名称。