首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >git格式-所有提交到一个文件的补丁

git格式-所有提交到一个文件的补丁
EN

Stack Overflow用户
提问于 2018-01-23 19:12:23
回答 3查看 3.6K关注 0票数 5

我想为对文件/文件夹进行的所有提交获取补丁。

我可以通过git log --format="%H"-- path/to/folder获取commit-id列表

有没有办法让我从这个列表中生成补丁。

编辑

下面的代码部分解决了我的问题

for c in `git log --format="%H" -- path/to/file`;do git format-patch "$c^1".."$c" -o patches ; done

因为format-patch是单独调用的,所以我将获得所有编号为0001-commit-text.patch的补丁,其中我将丢失补丁的顺序。有没有更好的解决方案?

EN

回答 3

Stack Overflow用户

发布于 2018-01-23 19:22:02

您可以尝试git diff initial_commit_id..latest_commit_id > changes.patch

这是基于本文:https://www.lullabot.com/articles/git-best-practices-upgrading-the-patch-process

例如:

代码语言:javascript
复制
git diff ab0b3a55de5..6f5dbbc4187b97

更新:如果您将特定文件的路径作为参数提供给format-patch,那么它将只为提交创建包含对该文件的更改的补丁。因此不需要循环和逐个调用format-patch。请参阅format-patch for a single file中的示例

所以试试这个:

代码语言:javascript
复制
get format-patch from..to -o patches /path/to/file 
票数 4
EN

Stack Overflow用户

发布于 2018-01-23 19:51:20

想出下面的shell脚本来实现这一点。欢迎任何其他答案。

代码语言:javascript
复制
#!/bin/bash
COUNTER=1;
for c in `git log --format="%H" --reverse -- path/to/file`;do
    git format-patch --start-number=$COUNTER "$c^1".."$c" -o patches
    let COUNTER=COUNTER+1
done
票数 4
EN

Stack Overflow用户

发布于 2021-01-20 01:02:08

我仅使用git进行了轻微的非预置(刚刚合成)

代码语言:javascript
复制
git format-patch $(git rev-list --max-parents=0 HEAD)..HEAD -- path/to/file

如果rev-list --max-parents返回多个提交,则可能不起作用。使用了这篇文章中的想法:

How to show first commit by 'git log'?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48400287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档