| name | git-patch-workflow |
| description | Creating, managing, and applying unified diff patches with Git for source code modifications. |
Git Patch Workflow
Creating Patch Files
Method 1: From Unstaged Changes
cd /path/to/repo
git diff path/to/file.java > /path/to/patch/fix.patch
Method 2: From Staged Changes
git diff --cached > /path/to/patch/fix.patch
Method 3: From Commits
git format-patch -N HEAD
git show COMMIT_HASH > /path/to/patch/fix.patch
Patch File Structure
A unified diff patch looks like:
--- a/original/path/file.java
+++ b/modified/path/file.java
@@ -10,5 +10,6 @@ class MyClass {
// context line
- old code here
+ new code here
// context line
Key components:
--- prefix: original file
+++ prefix: modified file
@@ markers: line numbers and context
- prefix: removed lines
+ prefix: added lines
- No prefix: context lines
Applying Patches
Basic Application
cd /path/to/repo
patch -p1 < /path/to/patch/fix.patch
With Error Handling
patch -p1 --dry-run < /path/to/patch/fix.patch
patch -p1 < /path/to/patch/fix.patch
patch -p0 < /path/to/patch/fix.patch
Best Practices
- Use Git Format: Create patches via
git diff or git format-patch for consistency
- Include Context: Ensure adequate context lines (3+ lines around changes)
- Test Patches: Always dry-run before applying to ensure compatibility
- Modular Patches: Create separate patches for logically independent changes
- Clear Names: Name patches descriptively (e.g.,
fix-javascript-security-bypass.patch)
- Document Changes: Include explanation of what the patch fixes
Verifying Application
git status
git diff HEAD
git show HEAD:path/to/file.java | grep "your fix"
Multiple Patches
For multiple related patches:
git diff HEAD~2 HEAD~1 > patch1.patch
git diff HEAD~1 HEAD > patch2.patch
patch -p1 < patch1.patch
patch -p1 < patch2.patch