Reputation: 371
I want to get patches for all commits that are made to a file/folder.
I can get the list of commit-id through git log --format="%H"-- path/to/folder
Is there a way i can get generate patches from this list.
[edit]:
below code partly solves my problem
for c in `git log --format="%H" -- path/to/file`;do
git format-patch "$c^1".."$c" -o patches ;
done
since format-patch is called individually, i will get patches all numbered 0001-commit-text.patch where i will lose the order of patches. Is there any better solutions
Upvotes: 9
Views: 6205
Reputation: 2135
Building on the rest of the answers.
If you want all the commits for a file which is in the initial / very first commit you must omit the SHA. Even <SHA>^1
will not "work" in this case.
git format-patch --root
Refering to How to use git format-patch on initial commit
Upvotes: 2
Reputation: 271
My slight improvization (just composed) by using only git
:
git format-patch $(git rev-list --max-parents=0 HEAD)..HEAD -- path/to/file
Might not work if the rev-list --max-parents
returns more than one commit. Used idea from that post:
How to show first commit by 'git log'?
Upvotes: 6
Reputation: 106
You can try git diff initial_commit_id..latest_commit_id > changes.patch
This is based on this article: https://www.lullabot.com/articles/git-best-practices-upgrading-the-patch-process
For example:
git diff ab0b3a55de5..6f5dbbc4187b97
Update: if you provide the path to the specific file as an argument to format-patch it'll only create patches for the commits with changes to that file. So no need for the loop and one-by-one invocation of format-patch. See example in format-patch for a single file
So try this:
get format-patch from..to -o patches /path/to/file
Upvotes: 5
Reputation: 371
Come up with the below shell script to achieve this. any other answers are welcome.
#!/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
Upvotes: 7