ZBLOG

git diff $(git rev-list --no-merges --reverse --exclude=commit_id_1 --exclude=commit_id_2 start_commit..end_commit) > output.patch

您尝试的命令 git diff $(git rev-list --no-merges --reverse --exclude=commit_id_1 --exclude=commit_id_2 start_commit..end_commit) 是一个很好的思路,但实际上,git rev-list 并不支持 --exclude 选项。要排除某些提交,可以使用其他方法来实现。

解决方案

以下是一个使用 git loggrep 的可行方案:

  1. 列出所有相关的提交: 首先,我们列出所需范围内的所有提交(不包含合并提交),然后通过管道排除不想要的提交。
git log --no-merges --reverse --pretty=format:"%H" start_commit..end_commit | grep -v -E "commit_id_1|commit_id_2" > commit_list.txt

这里,使用了 grep -v -E 来过滤掉你想要排除的两个提交。

  1. 生成补丁: 然后,你可以将这些提交用于生成补丁。用 xargs 将提取出来的提交 ID 传递给 git diff 命令:
git diff $(cat commit_list.txt) > output.patch

完整示例

假设你想从 abc1234def5678 之间的变更中排除 ghi9012jkl3456

# 列出所需范围内所有相关提交,并过滤掉不需要的提交
git log --no-merges --reverse --pretty=format:"%H" abc1234..def5678 | grep -v -E "ghi9012|jkl3456" > commit_list.txt

# 使用这些提交生成补丁文件
git diff $(cat commit_list.txt) > output.patch

注意事项

  • 确保在执行这些命令时,您处于正确的 Git 仓库目录。
  • 排除多次返回可能会增加复杂性,因此确保测试此过程以验证输出是否符合预期。

希望这个方案对您有所帮助!如果有其他问题,请随时问我。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=18988

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?