6

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

我可以通过git log --format="%H"-- path/to/folder

有没有办法可以从此列表中生成补丁。

[编辑]:

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

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 的补丁,其中我将丢失补丁的顺序。有没有更好的解决方案

4

3 回答 3

5

你可以试试 git diff initial_commit_id..latest_commit_id > changes.patch

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

例如:

git diff ab0b3a55de5..6f5dbbc4187b97

更新:如果您提供特定文件的路径作为 format-patch 的参数,它只会为对该文件进行更改的提交创建补丁。所以不需要循环和格式补丁的一一调用。请参阅格式补丁中的示例以获取单个文件

所以试试这个:

get format-patch from..to -o patches /path/to/file 
于 2018-01-23T11:22:01.940 回答
5

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

#!/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
于 2018-01-23T11:51:19.960 回答
1

我的轻微即兴创作(只是组成)仅使用git

git format-patch $(git rev-list --max-parents=0 HEAD)..HEAD -- path/to/file

rev-list --max-parents如果返回多个提交,则可能不起作用。使用该帖子的想法:

如何通过“git log”显示第一次提交?

于 2021-01-19T17:02:07.897 回答