Generate a git patch for a specific commit
I need to write a script that create patches for a list of SHA1 commit numbers.
I tried using git format-patch <the SHA1>
, but that generated a patch for each commit since that SHA1. After a few hundred patches were generated, I had to kill the process.
Is there a way to generate a patch only for the specific SHA1?
git patch
add a comment |
I need to write a script that create patches for a list of SHA1 commit numbers.
I tried using git format-patch <the SHA1>
, but that generated a patch for each commit since that SHA1. After a few hundred patches were generated, I had to kill the process.
Is there a way to generate a patch only for the specific SHA1?
git patch
add a comment |
I need to write a script that create patches for a list of SHA1 commit numbers.
I tried using git format-patch <the SHA1>
, but that generated a patch for each commit since that SHA1. After a few hundred patches were generated, I had to kill the process.
Is there a way to generate a patch only for the specific SHA1?
git patch
I need to write a script that create patches for a list of SHA1 commit numbers.
I tried using git format-patch <the SHA1>
, but that generated a patch for each commit since that SHA1. After a few hundred patches were generated, I had to kill the process.
Is there a way to generate a patch only for the specific SHA1?
git patch
git patch
edited Dec 29 '17 at 19:18
JasonMArcher
9,087104749
9,087104749
asked Jul 12 '11 at 0:35
elle
5,0903104
5,0903104
add a comment |
add a comment |
9 Answers
9
active
oldest
votes
Try:
git format-patch -1 <sha>
or
git format-patch -1 HEAD
According to the documentation link above, the -1
flag tells git how many commits should be included in the patch;
-<n>
Prepare patches from the topmost commits.
Apply the patch with the command:
git am < file.patch
153
Applying the patch:git apply --stat file.patch
# show stats.git apply --check file.patch
# check for error before applying.git am < file.patch
# apply the patch finally.
– Adrian
Mar 25 '14 at 14:15
2
It does not seem to work if the last commit is a merge from another branch.
– Lex Li
Apr 4 '14 at 3:52
5
Even easier with 1.8.5git format-patch -1 @
– Evan Purkhiser
Jun 17 '14 at 8:09
22
Usegit am -3 < file.patch
to apply using a three-way merge which will let you resolve conflicts usinggit mergetool
afterward (or editing manually) found here.
– Matt
Aug 5 '15 at 21:11
3
This command also works for just a specific file(s) from the commit:git format-patch -1 <sha> path/to/file.js
This will create a patch only containing the diffs for the file.js
– Kristof Dombi
Nov 22 '16 at 13:08
|
show 6 more comments
For generating the patches from the topmost commits from a specific sha1 hash:
git format-patch -<n> <SHA1>
The last 10 patches from head in a single patch file:
git format-patch -10 HEAD --stdout > 0001-last-10-commits.patch
1
can you please be kind enough to provide an example for the first command
– Kasun Siyambalapitiya
Dec 14 '16 at 6:22
git format-patch -1 HEAD
will generate patch for the most recent commit
– Sriram Murali
Dec 14 '16 at 18:36
1
pardon me for asking this, so when it is-2
it generate patches for most recent 2 commits is it, and one more thing to for clarification is the commandgot format-patch -2 HEAD
is same as the linegit format-patch HEAD~2
– Kasun Siyambalapitiya
Dec 15 '16 at 3:19
add a comment |
Say you have commit id 2 after commit 1 you would be able to run:
git diff 2 1 > mypatch.diff
where 2 and 1 are SHA hashes.
Thank you dookehster for the reply. That means I need the script to find the commits that preceded those I am interested in. I was hoping that I could avoid that.
– elle
Jul 12 '11 at 0:45
9
@elle, no, you don't --git diff hash^ hash
. the "hash^" give the preceded commit. (but, of course, manojlds's answer is better)
– J-16 SDiZ
Jul 12 '11 at 0:52
2
git show HEAD > mypatch.diff
while you're on the commit should do the same.
– andho
Apr 21 '15 at 12:49
@dookehester is it correct or is it the other way,git diff 1 2
– Kasun Siyambalapitiya
Dec 14 '16 at 6:25
I tend to use --no-prefix and apply with 'patch -p0 < patch file' ... patch files made this way also work interchangeably with subversion's diff output
– Rondo
Aug 8 '17 at 1:39
|
show 1 more comment
This command (as suggested already by @Naftuli Tzvi Kay):
git format-patch -1 HEAD
Replace HEAD
with specific hash or range.
will generate the patch file for the latest commit formatted to resemble UNIX mailbox format.
-<n>
- Prepare patches from the topmost commits.
Then you can re-apply the patch file in a mailbox format by:
git am -3k 001*.patch
See: man git-format-patch
.
Thanks! I think it's worth noting that applying the patch will create a commit with a commit message prefixed by [PATCH]. That's easy to fix though
– Mike S
Jun 9 '17 at 15:57
1
Phenomenal. OP, you haven't accepted this, because...? @MikeS No, it doesn't, anymore than any othergit
-formatted patch does, at least if the user applies it in the correct way.
– underscore_d
Oct 4 '17 at 22:30
add a comment |
git format-patch commit_Id~1..commit_Id
git apply patch-file-name
Fast and simple solution.
3
Also do not forget to callgit apply --check patch-file-name
before applying a patch. This will help to avoid problems.
– iamantony
Sep 13 '17 at 10:04
add a comment |
If you want to be sure the (single commit) patch will be applied on top of a specific commit, you can use the new git 2.9 (June 2016) option git format-patch --base
git format-patch --base=COMMIT_VALUE~ -M -C COMMIT_VALUE~..COMMIT_VALUE
# or
git format-patch --base=auto -M -C COMMIT_VALUE~..COMMIT_VALUE
# or
git config format.useAutoBase true
git format-patch -M -C COMMIT_VALUE~..COMMIT_VALUE
See commit bb52995, commit 3de6651, commit fa2ab86, commit ded2c09 (26 Apr 2016) by Xiaolong Ye (``).
(Merged by Junio C Hamano -- gitster
-- in commit 72ce3ff, 23 May 2016)
format-patch
: add '--base
' option to record base tree info
Maintainers or third party testers may want to know the exact base tree
the patch series applies to. Teach git format-patch a '--base
' option
to record the base tree info and append it at the end of the first
message (either the cover letter or the first patch in the series).
The base tree info consists of the "base commit", which is a well-known
commit that is part of the stable part of the project history everybody
else works off of, and zero or more "prerequisite patches", which are
well-known patches in flight that is not yet part of the "base commit"
that need to be applied on top of "base commit" in topological order
before the patches can be applied.
The "base commit" is shown as "
base-commit:
" followed by the 40-hex of
the commit object name.
A "prerequisite patch" is shown as "prerequisite-patch-id:
" followed by the 40-hex "patch id", which can be obtained by passing the patch through the "git patch-id --stable
" command.
add a comment |
To generate path from a specific commit (not the last commit):
git format-patch -M -C COMMIT_VALUE~1..COMMIT_VALUE
add a comment |
if you just want diff the specified file, you can :
git diff master 766eceb -- connections/ > 000-mysql-connector.patch
add a comment |
What is the way to generate a patch only for the specific SHA1?
It's quite simple:
Option 1. git show commitID > myFile.patch
Option 2. git commitID~1..commitID > myFile.patch
Note: Replace commitID
with actual commit id (SHA1 commit code).
2
Option 1 is downright wrong and is unrelated to the question.
– Anshuman Manral
Mar 28 '18 at 7:39
2
Option 2 is also an invalid command. You will get error like: git a5f4bcaeb7fa7de27ae79d9522332e872889bbf0~1..a5f4bcaeb7fa7de27ae79d9522332e872889bbf0 git: 'a5f4bcaeb7fa7de27ae79d9522332e872889bbf0~1..a5f4bcaeb7fa7de27ae79d9522332e872889bbf0' is not a git command. See 'git --help'. Pleas check before posting answers
– Anshuman Manral
Mar 28 '18 at 8:44
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f6658313%2fgenerate-a-git-patch-for-a-specific-commit%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
9 Answers
9
active
oldest
votes
9 Answers
9
active
oldest
votes
active
oldest
votes
active
oldest
votes
Try:
git format-patch -1 <sha>
or
git format-patch -1 HEAD
According to the documentation link above, the -1
flag tells git how many commits should be included in the patch;
-<n>
Prepare patches from the topmost commits.
Apply the patch with the command:
git am < file.patch
153
Applying the patch:git apply --stat file.patch
# show stats.git apply --check file.patch
# check for error before applying.git am < file.patch
# apply the patch finally.
– Adrian
Mar 25 '14 at 14:15
2
It does not seem to work if the last commit is a merge from another branch.
– Lex Li
Apr 4 '14 at 3:52
5
Even easier with 1.8.5git format-patch -1 @
– Evan Purkhiser
Jun 17 '14 at 8:09
22
Usegit am -3 < file.patch
to apply using a three-way merge which will let you resolve conflicts usinggit mergetool
afterward (or editing manually) found here.
– Matt
Aug 5 '15 at 21:11
3
This command also works for just a specific file(s) from the commit:git format-patch -1 <sha> path/to/file.js
This will create a patch only containing the diffs for the file.js
– Kristof Dombi
Nov 22 '16 at 13:08
|
show 6 more comments
Try:
git format-patch -1 <sha>
or
git format-patch -1 HEAD
According to the documentation link above, the -1
flag tells git how many commits should be included in the patch;
-<n>
Prepare patches from the topmost commits.
Apply the patch with the command:
git am < file.patch
153
Applying the patch:git apply --stat file.patch
# show stats.git apply --check file.patch
# check for error before applying.git am < file.patch
# apply the patch finally.
– Adrian
Mar 25 '14 at 14:15
2
It does not seem to work if the last commit is a merge from another branch.
– Lex Li
Apr 4 '14 at 3:52
5
Even easier with 1.8.5git format-patch -1 @
– Evan Purkhiser
Jun 17 '14 at 8:09
22
Usegit am -3 < file.patch
to apply using a three-way merge which will let you resolve conflicts usinggit mergetool
afterward (or editing manually) found here.
– Matt
Aug 5 '15 at 21:11
3
This command also works for just a specific file(s) from the commit:git format-patch -1 <sha> path/to/file.js
This will create a patch only containing the diffs for the file.js
– Kristof Dombi
Nov 22 '16 at 13:08
|
show 6 more comments
Try:
git format-patch -1 <sha>
or
git format-patch -1 HEAD
According to the documentation link above, the -1
flag tells git how many commits should be included in the patch;
-<n>
Prepare patches from the topmost commits.
Apply the patch with the command:
git am < file.patch
Try:
git format-patch -1 <sha>
or
git format-patch -1 HEAD
According to the documentation link above, the -1
flag tells git how many commits should be included in the patch;
-<n>
Prepare patches from the topmost commits.
Apply the patch with the command:
git am < file.patch
edited Nov 11 '18 at 20:01
Adam Liss
40.6k1193131
40.6k1193131
answered Jul 12 '11 at 0:43
manojlds
211k46369358
211k46369358
153
Applying the patch:git apply --stat file.patch
# show stats.git apply --check file.patch
# check for error before applying.git am < file.patch
# apply the patch finally.
– Adrian
Mar 25 '14 at 14:15
2
It does not seem to work if the last commit is a merge from another branch.
– Lex Li
Apr 4 '14 at 3:52
5
Even easier with 1.8.5git format-patch -1 @
– Evan Purkhiser
Jun 17 '14 at 8:09
22
Usegit am -3 < file.patch
to apply using a three-way merge which will let you resolve conflicts usinggit mergetool
afterward (or editing manually) found here.
– Matt
Aug 5 '15 at 21:11
3
This command also works for just a specific file(s) from the commit:git format-patch -1 <sha> path/to/file.js
This will create a patch only containing the diffs for the file.js
– Kristof Dombi
Nov 22 '16 at 13:08
|
show 6 more comments
153
Applying the patch:git apply --stat file.patch
# show stats.git apply --check file.patch
# check for error before applying.git am < file.patch
# apply the patch finally.
– Adrian
Mar 25 '14 at 14:15
2
It does not seem to work if the last commit is a merge from another branch.
– Lex Li
Apr 4 '14 at 3:52
5
Even easier with 1.8.5git format-patch -1 @
– Evan Purkhiser
Jun 17 '14 at 8:09
22
Usegit am -3 < file.patch
to apply using a three-way merge which will let you resolve conflicts usinggit mergetool
afterward (or editing manually) found here.
– Matt
Aug 5 '15 at 21:11
3
This command also works for just a specific file(s) from the commit:git format-patch -1 <sha> path/to/file.js
This will create a patch only containing the diffs for the file.js
– Kristof Dombi
Nov 22 '16 at 13:08
153
153
Applying the patch:
git apply --stat file.patch
# show stats. git apply --check file.patch
# check for error before applying. git am < file.patch
# apply the patch finally.– Adrian
Mar 25 '14 at 14:15
Applying the patch:
git apply --stat file.patch
# show stats. git apply --check file.patch
# check for error before applying. git am < file.patch
# apply the patch finally.– Adrian
Mar 25 '14 at 14:15
2
2
It does not seem to work if the last commit is a merge from another branch.
– Lex Li
Apr 4 '14 at 3:52
It does not seem to work if the last commit is a merge from another branch.
– Lex Li
Apr 4 '14 at 3:52
5
5
Even easier with 1.8.5
git format-patch -1 @
– Evan Purkhiser
Jun 17 '14 at 8:09
Even easier with 1.8.5
git format-patch -1 @
– Evan Purkhiser
Jun 17 '14 at 8:09
22
22
Use
git am -3 < file.patch
to apply using a three-way merge which will let you resolve conflicts using git mergetool
afterward (or editing manually) found here.– Matt
Aug 5 '15 at 21:11
Use
git am -3 < file.patch
to apply using a three-way merge which will let you resolve conflicts using git mergetool
afterward (or editing manually) found here.– Matt
Aug 5 '15 at 21:11
3
3
This command also works for just a specific file(s) from the commit:
git format-patch -1 <sha> path/to/file.js
This will create a patch only containing the diffs for the file.js– Kristof Dombi
Nov 22 '16 at 13:08
This command also works for just a specific file(s) from the commit:
git format-patch -1 <sha> path/to/file.js
This will create a patch only containing the diffs for the file.js– Kristof Dombi
Nov 22 '16 at 13:08
|
show 6 more comments
For generating the patches from the topmost commits from a specific sha1 hash:
git format-patch -<n> <SHA1>
The last 10 patches from head in a single patch file:
git format-patch -10 HEAD --stdout > 0001-last-10-commits.patch
1
can you please be kind enough to provide an example for the first command
– Kasun Siyambalapitiya
Dec 14 '16 at 6:22
git format-patch -1 HEAD
will generate patch for the most recent commit
– Sriram Murali
Dec 14 '16 at 18:36
1
pardon me for asking this, so when it is-2
it generate patches for most recent 2 commits is it, and one more thing to for clarification is the commandgot format-patch -2 HEAD
is same as the linegit format-patch HEAD~2
– Kasun Siyambalapitiya
Dec 15 '16 at 3:19
add a comment |
For generating the patches from the topmost commits from a specific sha1 hash:
git format-patch -<n> <SHA1>
The last 10 patches from head in a single patch file:
git format-patch -10 HEAD --stdout > 0001-last-10-commits.patch
1
can you please be kind enough to provide an example for the first command
– Kasun Siyambalapitiya
Dec 14 '16 at 6:22
git format-patch -1 HEAD
will generate patch for the most recent commit
– Sriram Murali
Dec 14 '16 at 18:36
1
pardon me for asking this, so when it is-2
it generate patches for most recent 2 commits is it, and one more thing to for clarification is the commandgot format-patch -2 HEAD
is same as the linegit format-patch HEAD~2
– Kasun Siyambalapitiya
Dec 15 '16 at 3:19
add a comment |
For generating the patches from the topmost commits from a specific sha1 hash:
git format-patch -<n> <SHA1>
The last 10 patches from head in a single patch file:
git format-patch -10 HEAD --stdout > 0001-last-10-commits.patch
For generating the patches from the topmost commits from a specific sha1 hash:
git format-patch -<n> <SHA1>
The last 10 patches from head in a single patch file:
git format-patch -10 HEAD --stdout > 0001-last-10-commits.patch
answered Apr 23 '13 at 14:34
Sriram Murali
3,58112028
3,58112028
1
can you please be kind enough to provide an example for the first command
– Kasun Siyambalapitiya
Dec 14 '16 at 6:22
git format-patch -1 HEAD
will generate patch for the most recent commit
– Sriram Murali
Dec 14 '16 at 18:36
1
pardon me for asking this, so when it is-2
it generate patches for most recent 2 commits is it, and one more thing to for clarification is the commandgot format-patch -2 HEAD
is same as the linegit format-patch HEAD~2
– Kasun Siyambalapitiya
Dec 15 '16 at 3:19
add a comment |
1
can you please be kind enough to provide an example for the first command
– Kasun Siyambalapitiya
Dec 14 '16 at 6:22
git format-patch -1 HEAD
will generate patch for the most recent commit
– Sriram Murali
Dec 14 '16 at 18:36
1
pardon me for asking this, so when it is-2
it generate patches for most recent 2 commits is it, and one more thing to for clarification is the commandgot format-patch -2 HEAD
is same as the linegit format-patch HEAD~2
– Kasun Siyambalapitiya
Dec 15 '16 at 3:19
1
1
can you please be kind enough to provide an example for the first command
– Kasun Siyambalapitiya
Dec 14 '16 at 6:22
can you please be kind enough to provide an example for the first command
– Kasun Siyambalapitiya
Dec 14 '16 at 6:22
git format-patch -1 HEAD
will generate patch for the most recent commit– Sriram Murali
Dec 14 '16 at 18:36
git format-patch -1 HEAD
will generate patch for the most recent commit– Sriram Murali
Dec 14 '16 at 18:36
1
1
pardon me for asking this, so when it is
-2
it generate patches for most recent 2 commits is it, and one more thing to for clarification is the command got format-patch -2 HEAD
is same as the line git format-patch HEAD~2
– Kasun Siyambalapitiya
Dec 15 '16 at 3:19
pardon me for asking this, so when it is
-2
it generate patches for most recent 2 commits is it, and one more thing to for clarification is the command got format-patch -2 HEAD
is same as the line git format-patch HEAD~2
– Kasun Siyambalapitiya
Dec 15 '16 at 3:19
add a comment |
Say you have commit id 2 after commit 1 you would be able to run:
git diff 2 1 > mypatch.diff
where 2 and 1 are SHA hashes.
Thank you dookehster for the reply. That means I need the script to find the commits that preceded those I am interested in. I was hoping that I could avoid that.
– elle
Jul 12 '11 at 0:45
9
@elle, no, you don't --git diff hash^ hash
. the "hash^" give the preceded commit. (but, of course, manojlds's answer is better)
– J-16 SDiZ
Jul 12 '11 at 0:52
2
git show HEAD > mypatch.diff
while you're on the commit should do the same.
– andho
Apr 21 '15 at 12:49
@dookehester is it correct or is it the other way,git diff 1 2
– Kasun Siyambalapitiya
Dec 14 '16 at 6:25
I tend to use --no-prefix and apply with 'patch -p0 < patch file' ... patch files made this way also work interchangeably with subversion's diff output
– Rondo
Aug 8 '17 at 1:39
|
show 1 more comment
Say you have commit id 2 after commit 1 you would be able to run:
git diff 2 1 > mypatch.diff
where 2 and 1 are SHA hashes.
Thank you dookehster for the reply. That means I need the script to find the commits that preceded those I am interested in. I was hoping that I could avoid that.
– elle
Jul 12 '11 at 0:45
9
@elle, no, you don't --git diff hash^ hash
. the "hash^" give the preceded commit. (but, of course, manojlds's answer is better)
– J-16 SDiZ
Jul 12 '11 at 0:52
2
git show HEAD > mypatch.diff
while you're on the commit should do the same.
– andho
Apr 21 '15 at 12:49
@dookehester is it correct or is it the other way,git diff 1 2
– Kasun Siyambalapitiya
Dec 14 '16 at 6:25
I tend to use --no-prefix and apply with 'patch -p0 < patch file' ... patch files made this way also work interchangeably with subversion's diff output
– Rondo
Aug 8 '17 at 1:39
|
show 1 more comment
Say you have commit id 2 after commit 1 you would be able to run:
git diff 2 1 > mypatch.diff
where 2 and 1 are SHA hashes.
Say you have commit id 2 after commit 1 you would be able to run:
git diff 2 1 > mypatch.diff
where 2 and 1 are SHA hashes.
answered Jul 12 '11 at 0:42
brandon
1,013813
1,013813
Thank you dookehster for the reply. That means I need the script to find the commits that preceded those I am interested in. I was hoping that I could avoid that.
– elle
Jul 12 '11 at 0:45
9
@elle, no, you don't --git diff hash^ hash
. the "hash^" give the preceded commit. (but, of course, manojlds's answer is better)
– J-16 SDiZ
Jul 12 '11 at 0:52
2
git show HEAD > mypatch.diff
while you're on the commit should do the same.
– andho
Apr 21 '15 at 12:49
@dookehester is it correct or is it the other way,git diff 1 2
– Kasun Siyambalapitiya
Dec 14 '16 at 6:25
I tend to use --no-prefix and apply with 'patch -p0 < patch file' ... patch files made this way also work interchangeably with subversion's diff output
– Rondo
Aug 8 '17 at 1:39
|
show 1 more comment
Thank you dookehster for the reply. That means I need the script to find the commits that preceded those I am interested in. I was hoping that I could avoid that.
– elle
Jul 12 '11 at 0:45
9
@elle, no, you don't --git diff hash^ hash
. the "hash^" give the preceded commit. (but, of course, manojlds's answer is better)
– J-16 SDiZ
Jul 12 '11 at 0:52
2
git show HEAD > mypatch.diff
while you're on the commit should do the same.
– andho
Apr 21 '15 at 12:49
@dookehester is it correct or is it the other way,git diff 1 2
– Kasun Siyambalapitiya
Dec 14 '16 at 6:25
I tend to use --no-prefix and apply with 'patch -p0 < patch file' ... patch files made this way also work interchangeably with subversion's diff output
– Rondo
Aug 8 '17 at 1:39
Thank you dookehster for the reply. That means I need the script to find the commits that preceded those I am interested in. I was hoping that I could avoid that.
– elle
Jul 12 '11 at 0:45
Thank you dookehster for the reply. That means I need the script to find the commits that preceded those I am interested in. I was hoping that I could avoid that.
– elle
Jul 12 '11 at 0:45
9
9
@elle, no, you don't --
git diff hash^ hash
. the "hash^" give the preceded commit. (but, of course, manojlds's answer is better)– J-16 SDiZ
Jul 12 '11 at 0:52
@elle, no, you don't --
git diff hash^ hash
. the "hash^" give the preceded commit. (but, of course, manojlds's answer is better)– J-16 SDiZ
Jul 12 '11 at 0:52
2
2
git show HEAD > mypatch.diff
while you're on the commit should do the same.– andho
Apr 21 '15 at 12:49
git show HEAD > mypatch.diff
while you're on the commit should do the same.– andho
Apr 21 '15 at 12:49
@dookehester is it correct or is it the other way,
git diff 1 2
– Kasun Siyambalapitiya
Dec 14 '16 at 6:25
@dookehester is it correct or is it the other way,
git diff 1 2
– Kasun Siyambalapitiya
Dec 14 '16 at 6:25
I tend to use --no-prefix and apply with 'patch -p0 < patch file' ... patch files made this way also work interchangeably with subversion's diff output
– Rondo
Aug 8 '17 at 1:39
I tend to use --no-prefix and apply with 'patch -p0 < patch file' ... patch files made this way also work interchangeably with subversion's diff output
– Rondo
Aug 8 '17 at 1:39
|
show 1 more comment
This command (as suggested already by @Naftuli Tzvi Kay):
git format-patch -1 HEAD
Replace HEAD
with specific hash or range.
will generate the patch file for the latest commit formatted to resemble UNIX mailbox format.
-<n>
- Prepare patches from the topmost commits.
Then you can re-apply the patch file in a mailbox format by:
git am -3k 001*.patch
See: man git-format-patch
.
Thanks! I think it's worth noting that applying the patch will create a commit with a commit message prefixed by [PATCH]. That's easy to fix though
– Mike S
Jun 9 '17 at 15:57
1
Phenomenal. OP, you haven't accepted this, because...? @MikeS No, it doesn't, anymore than any othergit
-formatted patch does, at least if the user applies it in the correct way.
– underscore_d
Oct 4 '17 at 22:30
add a comment |
This command (as suggested already by @Naftuli Tzvi Kay):
git format-patch -1 HEAD
Replace HEAD
with specific hash or range.
will generate the patch file for the latest commit formatted to resemble UNIX mailbox format.
-<n>
- Prepare patches from the topmost commits.
Then you can re-apply the patch file in a mailbox format by:
git am -3k 001*.patch
See: man git-format-patch
.
Thanks! I think it's worth noting that applying the patch will create a commit with a commit message prefixed by [PATCH]. That's easy to fix though
– Mike S
Jun 9 '17 at 15:57
1
Phenomenal. OP, you haven't accepted this, because...? @MikeS No, it doesn't, anymore than any othergit
-formatted patch does, at least if the user applies it in the correct way.
– underscore_d
Oct 4 '17 at 22:30
add a comment |
This command (as suggested already by @Naftuli Tzvi Kay):
git format-patch -1 HEAD
Replace HEAD
with specific hash or range.
will generate the patch file for the latest commit formatted to resemble UNIX mailbox format.
-<n>
- Prepare patches from the topmost commits.
Then you can re-apply the patch file in a mailbox format by:
git am -3k 001*.patch
See: man git-format-patch
.
This command (as suggested already by @Naftuli Tzvi Kay):
git format-patch -1 HEAD
Replace HEAD
with specific hash or range.
will generate the patch file for the latest commit formatted to resemble UNIX mailbox format.
-<n>
- Prepare patches from the topmost commits.
Then you can re-apply the patch file in a mailbox format by:
git am -3k 001*.patch
See: man git-format-patch
.
edited May 23 '17 at 12:18
community wiki
2 revs
kenorb
Thanks! I think it's worth noting that applying the patch will create a commit with a commit message prefixed by [PATCH]. That's easy to fix though
– Mike S
Jun 9 '17 at 15:57
1
Phenomenal. OP, you haven't accepted this, because...? @MikeS No, it doesn't, anymore than any othergit
-formatted patch does, at least if the user applies it in the correct way.
– underscore_d
Oct 4 '17 at 22:30
add a comment |
Thanks! I think it's worth noting that applying the patch will create a commit with a commit message prefixed by [PATCH]. That's easy to fix though
– Mike S
Jun 9 '17 at 15:57
1
Phenomenal. OP, you haven't accepted this, because...? @MikeS No, it doesn't, anymore than any othergit
-formatted patch does, at least if the user applies it in the correct way.
– underscore_d
Oct 4 '17 at 22:30
Thanks! I think it's worth noting that applying the patch will create a commit with a commit message prefixed by [PATCH]. That's easy to fix though
– Mike S
Jun 9 '17 at 15:57
Thanks! I think it's worth noting that applying the patch will create a commit with a commit message prefixed by [PATCH]. That's easy to fix though
– Mike S
Jun 9 '17 at 15:57
1
1
Phenomenal. OP, you haven't accepted this, because...? @MikeS No, it doesn't, anymore than any other
git
-formatted patch does, at least if the user applies it in the correct way.– underscore_d
Oct 4 '17 at 22:30
Phenomenal. OP, you haven't accepted this, because...? @MikeS No, it doesn't, anymore than any other
git
-formatted patch does, at least if the user applies it in the correct way.– underscore_d
Oct 4 '17 at 22:30
add a comment |
git format-patch commit_Id~1..commit_Id
git apply patch-file-name
Fast and simple solution.
3
Also do not forget to callgit apply --check patch-file-name
before applying a patch. This will help to avoid problems.
– iamantony
Sep 13 '17 at 10:04
add a comment |
git format-patch commit_Id~1..commit_Id
git apply patch-file-name
Fast and simple solution.
3
Also do not forget to callgit apply --check patch-file-name
before applying a patch. This will help to avoid problems.
– iamantony
Sep 13 '17 at 10:04
add a comment |
git format-patch commit_Id~1..commit_Id
git apply patch-file-name
Fast and simple solution.
git format-patch commit_Id~1..commit_Id
git apply patch-file-name
Fast and simple solution.
edited Sep 12 '17 at 16:06
iamantony
8721027
8721027
answered Jul 6 '17 at 13:52
zdrsoft
73977
73977
3
Also do not forget to callgit apply --check patch-file-name
before applying a patch. This will help to avoid problems.
– iamantony
Sep 13 '17 at 10:04
add a comment |
3
Also do not forget to callgit apply --check patch-file-name
before applying a patch. This will help to avoid problems.
– iamantony
Sep 13 '17 at 10:04
3
3
Also do not forget to call
git apply --check patch-file-name
before applying a patch. This will help to avoid problems.– iamantony
Sep 13 '17 at 10:04
Also do not forget to call
git apply --check patch-file-name
before applying a patch. This will help to avoid problems.– iamantony
Sep 13 '17 at 10:04
add a comment |
If you want to be sure the (single commit) patch will be applied on top of a specific commit, you can use the new git 2.9 (June 2016) option git format-patch --base
git format-patch --base=COMMIT_VALUE~ -M -C COMMIT_VALUE~..COMMIT_VALUE
# or
git format-patch --base=auto -M -C COMMIT_VALUE~..COMMIT_VALUE
# or
git config format.useAutoBase true
git format-patch -M -C COMMIT_VALUE~..COMMIT_VALUE
See commit bb52995, commit 3de6651, commit fa2ab86, commit ded2c09 (26 Apr 2016) by Xiaolong Ye (``).
(Merged by Junio C Hamano -- gitster
-- in commit 72ce3ff, 23 May 2016)
format-patch
: add '--base
' option to record base tree info
Maintainers or third party testers may want to know the exact base tree
the patch series applies to. Teach git format-patch a '--base
' option
to record the base tree info and append it at the end of the first
message (either the cover letter or the first patch in the series).
The base tree info consists of the "base commit", which is a well-known
commit that is part of the stable part of the project history everybody
else works off of, and zero or more "prerequisite patches", which are
well-known patches in flight that is not yet part of the "base commit"
that need to be applied on top of "base commit" in topological order
before the patches can be applied.
The "base commit" is shown as "
base-commit:
" followed by the 40-hex of
the commit object name.
A "prerequisite patch" is shown as "prerequisite-patch-id:
" followed by the 40-hex "patch id", which can be obtained by passing the patch through the "git patch-id --stable
" command.
add a comment |
If you want to be sure the (single commit) patch will be applied on top of a specific commit, you can use the new git 2.9 (June 2016) option git format-patch --base
git format-patch --base=COMMIT_VALUE~ -M -C COMMIT_VALUE~..COMMIT_VALUE
# or
git format-patch --base=auto -M -C COMMIT_VALUE~..COMMIT_VALUE
# or
git config format.useAutoBase true
git format-patch -M -C COMMIT_VALUE~..COMMIT_VALUE
See commit bb52995, commit 3de6651, commit fa2ab86, commit ded2c09 (26 Apr 2016) by Xiaolong Ye (``).
(Merged by Junio C Hamano -- gitster
-- in commit 72ce3ff, 23 May 2016)
format-patch
: add '--base
' option to record base tree info
Maintainers or third party testers may want to know the exact base tree
the patch series applies to. Teach git format-patch a '--base
' option
to record the base tree info and append it at the end of the first
message (either the cover letter or the first patch in the series).
The base tree info consists of the "base commit", which is a well-known
commit that is part of the stable part of the project history everybody
else works off of, and zero or more "prerequisite patches", which are
well-known patches in flight that is not yet part of the "base commit"
that need to be applied on top of "base commit" in topological order
before the patches can be applied.
The "base commit" is shown as "
base-commit:
" followed by the 40-hex of
the commit object name.
A "prerequisite patch" is shown as "prerequisite-patch-id:
" followed by the 40-hex "patch id", which can be obtained by passing the patch through the "git patch-id --stable
" command.
add a comment |
If you want to be sure the (single commit) patch will be applied on top of a specific commit, you can use the new git 2.9 (June 2016) option git format-patch --base
git format-patch --base=COMMIT_VALUE~ -M -C COMMIT_VALUE~..COMMIT_VALUE
# or
git format-patch --base=auto -M -C COMMIT_VALUE~..COMMIT_VALUE
# or
git config format.useAutoBase true
git format-patch -M -C COMMIT_VALUE~..COMMIT_VALUE
See commit bb52995, commit 3de6651, commit fa2ab86, commit ded2c09 (26 Apr 2016) by Xiaolong Ye (``).
(Merged by Junio C Hamano -- gitster
-- in commit 72ce3ff, 23 May 2016)
format-patch
: add '--base
' option to record base tree info
Maintainers or third party testers may want to know the exact base tree
the patch series applies to. Teach git format-patch a '--base
' option
to record the base tree info and append it at the end of the first
message (either the cover letter or the first patch in the series).
The base tree info consists of the "base commit", which is a well-known
commit that is part of the stable part of the project history everybody
else works off of, and zero or more "prerequisite patches", which are
well-known patches in flight that is not yet part of the "base commit"
that need to be applied on top of "base commit" in topological order
before the patches can be applied.
The "base commit" is shown as "
base-commit:
" followed by the 40-hex of
the commit object name.
A "prerequisite patch" is shown as "prerequisite-patch-id:
" followed by the 40-hex "patch id", which can be obtained by passing the patch through the "git patch-id --stable
" command.
If you want to be sure the (single commit) patch will be applied on top of a specific commit, you can use the new git 2.9 (June 2016) option git format-patch --base
git format-patch --base=COMMIT_VALUE~ -M -C COMMIT_VALUE~..COMMIT_VALUE
# or
git format-patch --base=auto -M -C COMMIT_VALUE~..COMMIT_VALUE
# or
git config format.useAutoBase true
git format-patch -M -C COMMIT_VALUE~..COMMIT_VALUE
See commit bb52995, commit 3de6651, commit fa2ab86, commit ded2c09 (26 Apr 2016) by Xiaolong Ye (``).
(Merged by Junio C Hamano -- gitster
-- in commit 72ce3ff, 23 May 2016)
format-patch
: add '--base
' option to record base tree info
Maintainers or third party testers may want to know the exact base tree
the patch series applies to. Teach git format-patch a '--base
' option
to record the base tree info and append it at the end of the first
message (either the cover letter or the first patch in the series).
The base tree info consists of the "base commit", which is a well-known
commit that is part of the stable part of the project history everybody
else works off of, and zero or more "prerequisite patches", which are
well-known patches in flight that is not yet part of the "base commit"
that need to be applied on top of "base commit" in topological order
before the patches can be applied.
The "base commit" is shown as "
base-commit:
" followed by the 40-hex of
the commit object name.
A "prerequisite patch" is shown as "prerequisite-patch-id:
" followed by the 40-hex "patch id", which can be obtained by passing the patch through the "git patch-id --stable
" command.
answered May 24 '16 at 7:26
VonC
830k28926113157
830k28926113157
add a comment |
add a comment |
To generate path from a specific commit (not the last commit):
git format-patch -M -C COMMIT_VALUE~1..COMMIT_VALUE
add a comment |
To generate path from a specific commit (not the last commit):
git format-patch -M -C COMMIT_VALUE~1..COMMIT_VALUE
add a comment |
To generate path from a specific commit (not the last commit):
git format-patch -M -C COMMIT_VALUE~1..COMMIT_VALUE
To generate path from a specific commit (not the last commit):
git format-patch -M -C COMMIT_VALUE~1..COMMIT_VALUE
answered May 4 '16 at 16:52
Makah
2,73123152
2,73123152
add a comment |
add a comment |
if you just want diff the specified file, you can :
git diff master 766eceb -- connections/ > 000-mysql-connector.patch
add a comment |
if you just want diff the specified file, you can :
git diff master 766eceb -- connections/ > 000-mysql-connector.patch
add a comment |
if you just want diff the specified file, you can :
git diff master 766eceb -- connections/ > 000-mysql-connector.patch
if you just want diff the specified file, you can :
git diff master 766eceb -- connections/ > 000-mysql-connector.patch
answered Jun 1 '18 at 6:29
jiahut
884811
884811
add a comment |
add a comment |
What is the way to generate a patch only for the specific SHA1?
It's quite simple:
Option 1. git show commitID > myFile.patch
Option 2. git commitID~1..commitID > myFile.patch
Note: Replace commitID
with actual commit id (SHA1 commit code).
2
Option 1 is downright wrong and is unrelated to the question.
– Anshuman Manral
Mar 28 '18 at 7:39
2
Option 2 is also an invalid command. You will get error like: git a5f4bcaeb7fa7de27ae79d9522332e872889bbf0~1..a5f4bcaeb7fa7de27ae79d9522332e872889bbf0 git: 'a5f4bcaeb7fa7de27ae79d9522332e872889bbf0~1..a5f4bcaeb7fa7de27ae79d9522332e872889bbf0' is not a git command. See 'git --help'. Pleas check before posting answers
– Anshuman Manral
Mar 28 '18 at 8:44
add a comment |
What is the way to generate a patch only for the specific SHA1?
It's quite simple:
Option 1. git show commitID > myFile.patch
Option 2. git commitID~1..commitID > myFile.patch
Note: Replace commitID
with actual commit id (SHA1 commit code).
2
Option 1 is downright wrong and is unrelated to the question.
– Anshuman Manral
Mar 28 '18 at 7:39
2
Option 2 is also an invalid command. You will get error like: git a5f4bcaeb7fa7de27ae79d9522332e872889bbf0~1..a5f4bcaeb7fa7de27ae79d9522332e872889bbf0 git: 'a5f4bcaeb7fa7de27ae79d9522332e872889bbf0~1..a5f4bcaeb7fa7de27ae79d9522332e872889bbf0' is not a git command. See 'git --help'. Pleas check before posting answers
– Anshuman Manral
Mar 28 '18 at 8:44
add a comment |
What is the way to generate a patch only for the specific SHA1?
It's quite simple:
Option 1. git show commitID > myFile.patch
Option 2. git commitID~1..commitID > myFile.patch
Note: Replace commitID
with actual commit id (SHA1 commit code).
What is the way to generate a patch only for the specific SHA1?
It's quite simple:
Option 1. git show commitID > myFile.patch
Option 2. git commitID~1..commitID > myFile.patch
Note: Replace commitID
with actual commit id (SHA1 commit code).
edited May 19 '17 at 20:38
msanford
6,59364365
6,59364365
answered Jan 17 '17 at 9:40
Ankush
231
231
2
Option 1 is downright wrong and is unrelated to the question.
– Anshuman Manral
Mar 28 '18 at 7:39
2
Option 2 is also an invalid command. You will get error like: git a5f4bcaeb7fa7de27ae79d9522332e872889bbf0~1..a5f4bcaeb7fa7de27ae79d9522332e872889bbf0 git: 'a5f4bcaeb7fa7de27ae79d9522332e872889bbf0~1..a5f4bcaeb7fa7de27ae79d9522332e872889bbf0' is not a git command. See 'git --help'. Pleas check before posting answers
– Anshuman Manral
Mar 28 '18 at 8:44
add a comment |
2
Option 1 is downright wrong and is unrelated to the question.
– Anshuman Manral
Mar 28 '18 at 7:39
2
Option 2 is also an invalid command. You will get error like: git a5f4bcaeb7fa7de27ae79d9522332e872889bbf0~1..a5f4bcaeb7fa7de27ae79d9522332e872889bbf0 git: 'a5f4bcaeb7fa7de27ae79d9522332e872889bbf0~1..a5f4bcaeb7fa7de27ae79d9522332e872889bbf0' is not a git command. See 'git --help'. Pleas check before posting answers
– Anshuman Manral
Mar 28 '18 at 8:44
2
2
Option 1 is downright wrong and is unrelated to the question.
– Anshuman Manral
Mar 28 '18 at 7:39
Option 1 is downright wrong and is unrelated to the question.
– Anshuman Manral
Mar 28 '18 at 7:39
2
2
Option 2 is also an invalid command. You will get error like: git a5f4bcaeb7fa7de27ae79d9522332e872889bbf0~1..a5f4bcaeb7fa7de27ae79d9522332e872889bbf0 git: 'a5f4bcaeb7fa7de27ae79d9522332e872889bbf0~1..a5f4bcaeb7fa7de27ae79d9522332e872889bbf0' is not a git command. See 'git --help'. Pleas check before posting answers
– Anshuman Manral
Mar 28 '18 at 8:44
Option 2 is also an invalid command. You will get error like: git a5f4bcaeb7fa7de27ae79d9522332e872889bbf0~1..a5f4bcaeb7fa7de27ae79d9522332e872889bbf0 git: 'a5f4bcaeb7fa7de27ae79d9522332e872889bbf0~1..a5f4bcaeb7fa7de27ae79d9522332e872889bbf0' is not a git command. See 'git --help'. Pleas check before posting answers
– Anshuman Manral
Mar 28 '18 at 8:44
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f6658313%2fgenerate-a-git-patch-for-a-specific-commit%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown