mirror of
https://github.com/mike-rambil/Advanced-Git.git
synced 2025-12-30 22:19:32 -06:00
808 lines
32 KiB
JSON
808 lines
32 KiB
JSON
[
|
|
{
|
|
"Name": "Git Essentials & Hidden Gems",
|
|
"category": "Miscellaneous",
|
|
"short_description": "Start here to discover commands that can improve your workflow and understanding of Git.",
|
|
"long_description": "A collection of practical, lesser-known, and foundational Git commands that are useful for all users. Start here to discover commands that can improve your workflow and understanding of Git.",
|
|
"tags": ["misc", "cleanup", "advanced"],
|
|
"author": "mike-rambil",
|
|
"last_updated": "2024-06-10",
|
|
"protips": [
|
|
"Try these commands in a test repo before using them on important projects.",
|
|
"Bookmark this section for quick reference to hidden gems."
|
|
],
|
|
"subtoc": [
|
|
{
|
|
"Name": "git maintenance start",
|
|
"category": "Maintenance",
|
|
"short_description": "Runs a cronJob in background for the specified repo for periodic maintenance.",
|
|
"command": "git maintenance start",
|
|
"examples": [
|
|
{
|
|
"code": "git maintenance start",
|
|
"description": "Enable background maintenance for your repository."
|
|
},
|
|
{
|
|
"code": "git maintenance start --schedule=hourly",
|
|
"description": "Run maintenance tasks every hour for more active repos."
|
|
}
|
|
],
|
|
"steps": ["Run `git maintenance start` in your repository."],
|
|
"links": [
|
|
{
|
|
"label": "Official Docs",
|
|
"url": "https://git-scm.com/docs/git-maintenance"
|
|
}
|
|
],
|
|
"tags": ["maintenance", "automation"],
|
|
"author": "mike-rambil",
|
|
"last_updated": "2024-06-10",
|
|
"protips": [
|
|
"Set up maintenance on large repos to keep them fast.",
|
|
"Use with cron or scheduled tasks for automation."
|
|
]
|
|
},
|
|
{
|
|
"Name": "git request-pull",
|
|
"category": "Collaboration",
|
|
"short_description": "Generate a request to pull changes into a repository.",
|
|
"command": "git request-pull <start> <url> <end>",
|
|
"examples": [
|
|
{
|
|
"code": "git request-pull v1.0 https://github.com/example/repo.git v1.1",
|
|
"description": "Generate a pull request message from v1.0 to v1.1."
|
|
},
|
|
{
|
|
"code": "git request-pull main https://github.com/example/repo.git feature-branch",
|
|
"description": "Request a pull for a feature branch based on main."
|
|
}
|
|
],
|
|
"steps": [
|
|
"Run `git request-pull <start> <url> <end>` to generate a pull request message."
|
|
],
|
|
"links": [
|
|
{
|
|
"label": "Official Docs",
|
|
"url": "https://git-scm.com/docs/git-request-pull"
|
|
}
|
|
],
|
|
"tags": ["collaboration", "pull-request"],
|
|
"author": "mike-rambil",
|
|
"last_updated": "2024-06-10",
|
|
"protips": [
|
|
"Use request-pull to generate a summary for code reviews.",
|
|
"Include a clear start and end point for clarity."
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"Name": "Cleanup Branches Fast ⚡",
|
|
"category": "Branch Management",
|
|
"short_description": "Quickly view and clean up local branches using Bash or PowerShell, including removing branches whose remote is gone.",
|
|
"tags": ["branches", "cleanup", "fast", "bash", "powershell"],
|
|
"author": "mike-rambil",
|
|
"last_updated": "2024-06-10",
|
|
"protips": [
|
|
"Run 'git fetch -p' before cleaning up branches to update remote info.",
|
|
"Always double-check which branches will be deleted."
|
|
],
|
|
"subtoc": [
|
|
{
|
|
"Name": "Delete Local Branches Whose Remote is Gone (Bash)",
|
|
"category": "Branch Management",
|
|
"short_description": "Delete all local branches whose remote counterpart has been deleted, using Bash.",
|
|
"long_description": "This command fetches the latest remote info and deletes all local branches whose remote tracking branch no longer exists (marked as 'gone'). Useful for cleaning up after remote branch deletions.",
|
|
"command": "git fetch -p && git branch -vv | grep '\\[origin/.*: gone\\]' | awk '{print $1}' | xargs -r git branch -d",
|
|
"examples": [
|
|
{
|
|
"code": "git fetch -p && git branch -vv | grep '\\[origin/.*: gone\\]' | awk '{print $1}' | xargs -r git branch -d",
|
|
"description": "Delete all local branches whose remote is gone."
|
|
},
|
|
{
|
|
"code": "git fetch -p && git branch -vv | grep '\\[origin/feature: gone\\]' | awk '{print $1}' | xargs -r git branch -d",
|
|
"description": "Delete only feature branches whose remote is gone."
|
|
}
|
|
],
|
|
"steps": [
|
|
"Fetch latest remote info: git fetch -p",
|
|
"List local branches whose remote is gone: git branch -vv | grep '[origin/.*: gone]'",
|
|
"Delete those branches: ... | awk '{print $1}' | xargs -r git branch -d"
|
|
],
|
|
"warnings": [
|
|
"This will permanently delete local branches. Double-check before running.",
|
|
"Make sure you have no unmerged work on these branches."
|
|
],
|
|
"tags": ["branches", "cleanup", "gone", "bash"],
|
|
"author": "mike-rambil",
|
|
"last_updated": "2024-06-10",
|
|
"protips": [
|
|
"Use this after deleting branches on the remote to keep your local repo tidy.",
|
|
"Add 'echo' before 'git branch -d' to preview what will be deleted."
|
|
]
|
|
},
|
|
{
|
|
"Name": "Delete Local Branches Whose Remote is Gone (PowerShell)",
|
|
"category": "Branch Management",
|
|
"short_description": "Delete all local branches whose remote counterpart has been deleted, using PowerShell.",
|
|
"long_description": "This script fetches the latest remote info and deletes all local branches whose remote tracking branch no longer exists (marked as 'gone'). Useful for cleaning up after remote branch deletions.",
|
|
"command": "git fetch -p\ngit branch -vv | ForEach-Object { if ($_ -match '\\[.*: gone\\]') { $parts = $_.Trim() -split '\\s+'; $branch = $parts[0]; if ($branch -ne '') { git branch -d $branch } } }",
|
|
"examples": [
|
|
{
|
|
"code": "git fetch -p\ngit branch -vv | ForEach-Object { if ($_ -match '[.*: gone]') { $parts = $_.Trim() -split '\\s+'; $branch = $parts[0]; if ($branch -ne '') { git branch -d $branch } } }",
|
|
"description": "Delete all local branches whose remote is gone."
|
|
},
|
|
{
|
|
"code": "git fetch -p\ngit branch -vv | ForEach-Object { if ($_ -match '[origin/feature: gone]') { $parts = $_.Trim() -split 's+'; $branch = $parts[0]; if ($branch -ne '') { git branch -d $branch } } }",
|
|
"description": "Delete only feature branches whose remote is gone."
|
|
}
|
|
],
|
|
"steps": [
|
|
"Fetch latest remote info: git fetch -p",
|
|
"List local branches whose remote is gone: git branch -vv | ForEach-Object { if ($_ -match '[.*: gone]') ... }",
|
|
"Delete those branches inside the loop."
|
|
],
|
|
"warnings": [
|
|
"This will permanently delete local branches. Double-check before running.",
|
|
"Make sure you have no unmerged work on these branches."
|
|
],
|
|
"tags": ["branches", "cleanup", "gone", "powershell"],
|
|
"author": "mike-rambil",
|
|
"last_updated": "2024-06-10",
|
|
"protips": [
|
|
"Great for Windows users to automate branch cleanup.",
|
|
"Review the list before confirming deletion."
|
|
]
|
|
},
|
|
{
|
|
"Name": "View and Clean Up Local Git Branches (Bash)",
|
|
"category": "Branch Management",
|
|
"short_description": "Scripts to view and clean up local branches using Bash.",
|
|
"examples": [
|
|
{
|
|
"code": "git branch -vv | grep -E '^\\s*\\S+\\s+[^\\[]+$'",
|
|
"description": "List local branches without a remote connection."
|
|
},
|
|
{
|
|
"code": "git branch -vv | grep -E '^\\s*\\S+\\s+[^\\[]+$' | awk '{print $1}' | xargs git branch -D",
|
|
"description": "Delete local branches without remote tracking."
|
|
},
|
|
{
|
|
"code": "git branch -vv | grep 'gone'",
|
|
"description": "List branches whose remote is gone."
|
|
}
|
|
],
|
|
"steps": [
|
|
"List local branches.",
|
|
"Delete local branches without remote.",
|
|
"View branches with deleted remote.",
|
|
"Delete stale local branches."
|
|
],
|
|
"warnings": [
|
|
"Deleting branches is irreversible. Double-check before running destructive commands."
|
|
],
|
|
"tags": ["branches", "cleanup", "bash"],
|
|
"author": "mike-rambil",
|
|
"last_updated": "2024-06-10",
|
|
"protips": [
|
|
"Use 'git branch -vv' to see tracking info for all branches.",
|
|
"Pipe to 'awk' and 'xargs' for batch deletion."
|
|
]
|
|
},
|
|
{
|
|
"Name": "View and Clean Up Local Git Branches (PowerShell)",
|
|
"category": "Branch Management",
|
|
"short_description": "Scripts to view and clean up local branches using PowerShell.",
|
|
"examples": [
|
|
{
|
|
"code": "git branch -vv | Select-String -NotMatch \"origin/\"",
|
|
"description": "List local branches without a remote connection."
|
|
},
|
|
{
|
|
"code": "git branch -vv | Select-String -NotMatch \"origin/\" | ForEach-Object { $branch = ($_ -split \"\\s+\")[1]; git branch -D $branch }",
|
|
"description": "Delete local branches without remote tracking."
|
|
},
|
|
{
|
|
"code": "git branch -vv | Select-String 'gone'",
|
|
"description": "List branches whose remote is gone."
|
|
}
|
|
],
|
|
"steps": [
|
|
"List local branches.",
|
|
"Delete local branches without remote.",
|
|
"View branches with deleted remote.",
|
|
"Delete stale local branches."
|
|
],
|
|
"warnings": [
|
|
"Deleting branches is irreversible. Double-check before running destructive commands."
|
|
],
|
|
"tags": ["branches", "cleanup", "powershell"],
|
|
"author": "mike-rambil",
|
|
"last_updated": "2024-06-10",
|
|
"protips": [
|
|
"Use PowerShell's 'Select-String' for flexible filtering.",
|
|
"Automate cleanup with a script for regular maintenance."
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"Name": "Git Command Reference (Full List)",
|
|
"category": "Reference",
|
|
"short_description": "A comprehensive list of Git commands used in this project.",
|
|
"long_description": "A comprehensive list of Git commands used in this project, formatted according to our standard.",
|
|
"tags": ["reference", "all-commands"],
|
|
"author": "mike-rambil",
|
|
"last_updated": "2024-06-10",
|
|
"subtoc": [
|
|
{
|
|
"Name": "git init --bare",
|
|
"category": "Repository Management",
|
|
"short_description": "Initialize a bare repository, typically used for remote repositories.",
|
|
"command": "git init --bare my-repo.git",
|
|
"examples": [
|
|
{
|
|
"code": "git init --bare my-repo.git",
|
|
"description": "Create a bare repository for collaboration."
|
|
},
|
|
{
|
|
"code": "git init --bare /srv/git/project.git",
|
|
"description": "Initialize a bare repo in a custom directory for server hosting."
|
|
}
|
|
],
|
|
"steps": [
|
|
"Run `git init --bare my-repo.git` to create a bare repository."
|
|
],
|
|
"tags": ["init", "bare", "repository"],
|
|
"author": "mike-rambil",
|
|
"last_updated": "2024-06-10"
|
|
},
|
|
{
|
|
"Name": "git clone --mirror <repository>",
|
|
"category": "Repository Management",
|
|
"short_description": "Clone a repository in mirror mode, including all refs and branches.",
|
|
"command": "git clone --mirror https://github.com/example/repo.git",
|
|
"examples": [
|
|
{
|
|
"code": "git clone --mirror https://github.com/example/repo.git",
|
|
"description": "Create a full backup or migration of a repository."
|
|
},
|
|
{
|
|
"code": "git clone --mirror git@github.com:org/repo.git",
|
|
"description": "Mirror-clone a private repo using SSH."
|
|
}
|
|
],
|
|
"steps": [
|
|
"Run `git clone --mirror <repository>` to create a full backup or migration."
|
|
],
|
|
"tags": ["clone", "mirror", "backup"],
|
|
"author": "mike-rambil",
|
|
"last_updated": "2024-06-10"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"Name": "Useful Rare Git Commands You Never Heard Of",
|
|
"category": "Advanced",
|
|
"short_description": "A collection of lesser-known but powerful Git commands.",
|
|
"long_description": "A collection of lesser-known but powerful Git commands. Use these to level up your Git workflow!",
|
|
"tags": ["rare", "advanced", "tips"],
|
|
"author": "mike-rambil",
|
|
"last_updated": "2024-06-10",
|
|
"subtoc": [
|
|
{
|
|
"Name": "git replace <old-commit> <new-commit>",
|
|
"category": "History",
|
|
"short_description": "Temporarily substitute one commit for another.",
|
|
"command": "git replace abc123 def456",
|
|
"examples": [
|
|
{
|
|
"code": "git replace abc123 def456",
|
|
"description": "Temporarily replace commit abc123 with def456."
|
|
},
|
|
{
|
|
"code": "git replace --graft HEAD~2 HEAD",
|
|
"description": "Graft a new parent onto a commit for testing history changes."
|
|
}
|
|
],
|
|
"steps": [
|
|
"Run `git replace <old-commit> <new-commit>` to test or patch history."
|
|
],
|
|
"tags": ["replace", "history"],
|
|
"author": "mike-rambil",
|
|
"last_updated": "2024-06-10"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"Name": "How to Use git push --force-with-lease Safely",
|
|
"category": "Collaboration",
|
|
"short_description": "Safely force-push to a branch without overwriting others' work.",
|
|
"long_description": "Guide to using `git push --force-with-lease` to avoid overwriting others' work when force-pushing.",
|
|
"command": "git push --force-with-lease",
|
|
"examples": [
|
|
{
|
|
"code": "git push --force-with-lease",
|
|
"description": "Safely force-push your changes."
|
|
},
|
|
{
|
|
"code": "git push --force-with-lease origin feature-branch",
|
|
"description": "Force-push a specific branch with lease protection."
|
|
}
|
|
],
|
|
"steps": [
|
|
"Fetch the latest changes: `git fetch origin`",
|
|
"Push with lease: `git push --force-with-lease`",
|
|
"If rejected, pull and rebase: `git pull --rebase origin main`",
|
|
"Resolve conflicts, commit, and retry push"
|
|
],
|
|
"prerequisites": ["You must have permission to push to the branch."],
|
|
"warnings": [
|
|
"Never use `--force` unless you are sure. Prefer `--force-with-lease`."
|
|
],
|
|
"links": [
|
|
{
|
|
"label": "Medium Article",
|
|
"url": "https://medium.com/@sahilsahilbhatia/git-push-force-with-lease-vs-force-ecae72601e80"
|
|
}
|
|
],
|
|
"tags": ["push", "force", "safe"],
|
|
"author": "mike-rambil",
|
|
"last_updated": "2024-06-10"
|
|
},
|
|
{
|
|
"Name": "Past commits of a specific file",
|
|
"category": "History and Inspection",
|
|
"short_description": "See all commits and changes for a specific file.",
|
|
"long_description": "You can see all commits related to a specific file using Git commands. Here are a few ways to do it:",
|
|
"tags": ["history", "inspection", "file"],
|
|
"author": "mike-rambil",
|
|
"last_updated": "2024-06-10",
|
|
"subtoc": [
|
|
{
|
|
"Name": "Show Commit History of a Specific File",
|
|
"category": "History",
|
|
"command": "git log --oneline -- filename.txt",
|
|
"examples": [
|
|
{
|
|
"code": "git log --oneline -- filename.txt",
|
|
"description": "List all commits that modified `filename.txt`."
|
|
},
|
|
{
|
|
"code": "git log --oneline -- path/to/anotherfile.js",
|
|
"description": "Show commit history for a different file."
|
|
}
|
|
],
|
|
"steps": ["Lists all commits that modified `filename.txt`."],
|
|
"tags": ["log", "file", "history"],
|
|
"related_commands": [
|
|
"git log -p -- filename.txt",
|
|
"git blame filename.txt"
|
|
],
|
|
"author": "mike-rambil",
|
|
"last_updated": "2024-06-10"
|
|
},
|
|
{
|
|
"Name": "Show Detailed Commit History (With Changes)",
|
|
"category": "History",
|
|
"command": "git log -p -- filename.txt",
|
|
"examples": [
|
|
{
|
|
"code": "git log -p -- filename.txt",
|
|
"description": "Show each commit and the actual changes made to `filename.txt`."
|
|
},
|
|
{
|
|
"code": "git log -p -2 -- filename.txt",
|
|
"description": "Show the last two commits and their changes for a file."
|
|
}
|
|
],
|
|
"steps": [
|
|
"Shows each commit and the actual changes made to `filename.txt`."
|
|
],
|
|
"tags": ["log", "diff", "file"],
|
|
"related_commands": ["git log --oneline -- filename.txt"],
|
|
"author": "mike-rambil",
|
|
"last_updated": "2024-06-10"
|
|
},
|
|
{
|
|
"Name": "Show Commit History With Author and Date",
|
|
"category": "History",
|
|
"command": "git log --pretty=format:\"%h - %an, %ar : %s\" -- filename.txt",
|
|
"examples": [
|
|
{
|
|
"code": "git log --pretty=format:\"%h - %an, %ar : %s\" -- filename.txt",
|
|
"description": "Display commit hash, author, relative date, and commit message."
|
|
},
|
|
{
|
|
"code": "git log --pretty=format:'%h | %ad | %an | %s' --date=short -- filename.txt",
|
|
"description": "Show commit hash, short date, author, and message."
|
|
}
|
|
],
|
|
"steps": [
|
|
"Displays commit hash, author, relative date, and commit message."
|
|
],
|
|
"tags": ["log", "author", "date"],
|
|
"author": "mike-rambil",
|
|
"last_updated": "2024-06-10"
|
|
},
|
|
{
|
|
"Name": "See Who Last Modified Each Line (Blame)",
|
|
"category": "History",
|
|
"command": "git blame filename.txt",
|
|
"examples": [
|
|
{
|
|
"code": "git blame filename.txt",
|
|
"description": "Show the last commit that changed each line of the file."
|
|
},
|
|
{
|
|
"code": "git blame -L 10,20 filename.txt",
|
|
"description": "Blame only lines 10 to 20 of a file."
|
|
}
|
|
],
|
|
"steps": ["Shows the last commit that changed each line of the file."],
|
|
"tags": ["blame", "file", "history"],
|
|
"warnings": [
|
|
"Blame can be misleading if the file has been heavily refactored."
|
|
],
|
|
"author": "mike-rambil",
|
|
"last_updated": "2024-06-10"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"Name": "Git Clean: Remove Untracked Files and Directories",
|
|
"category": "Stashing and Cleaning",
|
|
"short_description": "Remove untracked files and directories from your repository.",
|
|
"long_description": "`git clean` is a powerful command that helps remove untracked files and directories from your repository. It is particularly useful when you want to reset your working directory without affecting committed files.",
|
|
"command": "git clean",
|
|
"flags": {
|
|
"-n": "Shows what will be deleted without actually deleting anything.",
|
|
"-f": "Forces deletion of untracked files.",
|
|
"-d": "Deletes untracked directories.",
|
|
"-i": "Interactive mode to selectively delete files.",
|
|
"-x": "Removes ignored and untracked files.",
|
|
"-X": "Removes only ignored files."
|
|
},
|
|
"examples": [
|
|
{
|
|
"code": "git clean -n -d",
|
|
"description": "Preview what will be deleted (dry run)."
|
|
},
|
|
{
|
|
"code": "git clean -f",
|
|
"description": "Delete all untracked files."
|
|
},
|
|
{
|
|
"code": "git clean -f -d",
|
|
"description": "Delete all untracked files and directories."
|
|
},
|
|
{
|
|
"code": "git clean -i",
|
|
"description": "Interactive mode for selective deletion."
|
|
},
|
|
{
|
|
"code": "git clean -f -x",
|
|
"description": "Delete untracked and ignored files."
|
|
}
|
|
],
|
|
"steps": [
|
|
"Preview deletions: `git clean -n -d`",
|
|
"Delete untracked files: `git clean -f`",
|
|
"Delete untracked files and directories: `git clean -f -d`",
|
|
"Interactive deletion: `git clean -i`",
|
|
"Remove ignored and untracked files: `git clean -f -x`",
|
|
"Remove only ignored files: `git clean -f -X`"
|
|
],
|
|
"prerequisites": ["Make sure you have committed all important changes."],
|
|
"warnings": [
|
|
"This will permanently delete files! Always use `-n` before `-f`.",
|
|
"Be cautious with `-x` and `-X` as they remove ignored files, which might include config files."
|
|
],
|
|
"links": [
|
|
{ "label": "Official Docs", "url": "https://git-scm.com/docs/git-clean" }
|
|
],
|
|
"tags": ["clean", "untracked", "workspace"],
|
|
"author": "mike-rambil",
|
|
"last_updated": "2024-06-10"
|
|
},
|
|
{
|
|
"Name": "How to Use git worktree Safely",
|
|
"category": "Worktree",
|
|
"short_description": "Work on multiple branches simultaneously without switching.",
|
|
"long_description": "`git worktree` allows you to manage multiple working directories linked to a single Git repository. It helps developers work on multiple branches simultaneously without switching branches in the same directory.",
|
|
"tags": ["worktree", "branches", "advanced"],
|
|
"author": "mike-rambil",
|
|
"last_updated": "2024-06-10",
|
|
"subtoc": [
|
|
{
|
|
"Name": "Check Existing Worktrees",
|
|
"category": "Worktree",
|
|
"command": "git worktree list",
|
|
"examples": [
|
|
{
|
|
"code": "git worktree list",
|
|
"description": "List all active worktrees."
|
|
},
|
|
{
|
|
"code": "git worktree list --porcelain",
|
|
"description": "List worktrees in a machine-readable format."
|
|
}
|
|
],
|
|
"steps": ["List all active worktrees."],
|
|
"tags": ["worktree", "list"],
|
|
"author": "mike-rambil",
|
|
"last_updated": "2024-06-10"
|
|
},
|
|
{
|
|
"Name": "Create a New Worktree",
|
|
"category": "Worktree",
|
|
"command": "git worktree add <path> <branch>",
|
|
"examples": [
|
|
{
|
|
"code": "git worktree add ../feature-branch feature",
|
|
"description": "Create a new worktree for the feature branch."
|
|
},
|
|
{
|
|
"code": "git worktree add ../hotfix hotfix-branch",
|
|
"description": "Create a worktree for a hotfix branch."
|
|
}
|
|
],
|
|
"steps": ["Create a worktree linked to a specific branch."],
|
|
"prerequisites": [
|
|
"The target path must not already be a git repository."
|
|
],
|
|
"tags": ["worktree", "add"],
|
|
"author": "mike-rambil",
|
|
"last_updated": "2024-06-10"
|
|
},
|
|
{
|
|
"Name": "Remove a Worktree",
|
|
"category": "Worktree",
|
|
"command": "git worktree remove <worktree-path>",
|
|
"examples": [
|
|
{
|
|
"code": "git worktree remove ../feature-branch",
|
|
"description": "Detach a worktree without deleting the files."
|
|
},
|
|
{
|
|
"code": "git worktree remove ../hotfix",
|
|
"description": "Remove a hotfix worktree."
|
|
}
|
|
],
|
|
"steps": ["Detach a worktree without deleting the files."],
|
|
"warnings": [
|
|
"Make sure you have committed all changes before removing a worktree."
|
|
],
|
|
"tags": ["worktree", "remove"],
|
|
"author": "mike-rambil",
|
|
"last_updated": "2024-06-10"
|
|
},
|
|
{
|
|
"Name": "Switch Between Worktrees",
|
|
"category": "Worktree",
|
|
"command": "cd <worktree-path>",
|
|
"examples": [
|
|
{
|
|
"code": "cd ../feature-branch",
|
|
"description": "Switch to the worktree directory."
|
|
},
|
|
{
|
|
"code": "cd ../hotfix",
|
|
"description": "Switch to a hotfix worktree."
|
|
}
|
|
],
|
|
"steps": ["Simply cd into the worktree directory to switch."],
|
|
"tags": ["worktree", "switch"],
|
|
"author": "mike-rambil",
|
|
"last_updated": "2024-06-10"
|
|
},
|
|
{
|
|
"Name": "Use Worktrees for Temporary Fixes",
|
|
"category": "Worktree",
|
|
"command": "git worktree add ../hotfix hotfix-branch",
|
|
"examples": [
|
|
{
|
|
"code": "git worktree add ../hotfix hotfix-branch",
|
|
"description": "Quickly apply a fix on another branch without leaving your main branch."
|
|
},
|
|
{
|
|
"code": "git worktree add ../bugfix bugfix-branch",
|
|
"description": "Create a worktree for a bugfix branch."
|
|
}
|
|
],
|
|
"steps": [
|
|
"Quickly apply a fix on another branch without leaving your main branch."
|
|
],
|
|
"tags": ["worktree", "hotfix"],
|
|
"author": "mike-rambil",
|
|
"last_updated": "2024-06-10"
|
|
},
|
|
{
|
|
"Name": "Flags and Their Uses",
|
|
"flags": {
|
|
"add": "Creates a new worktree for an existing branch.",
|
|
"-b": "Creates a new worktree with a new branch.",
|
|
"list": "Lists all active worktrees.",
|
|
"remove": "Detaches a worktree from the repo without deleting files.",
|
|
"prune": "Cleans up stale worktree references after manual deletion.",
|
|
"move": "Moves a worktree to a different location."
|
|
},
|
|
"tags": ["worktree", "flags"],
|
|
"author": "mike-rambil",
|
|
"last_updated": "2024-06-10"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"Name": "Sharing Changes as Patch Files",
|
|
"category": "Patch & Diff",
|
|
"short_description": "Generate and share patch files for committed or uncommitted changes.",
|
|
"long_description": "How to create patch files from your changes for sharing via email, SCP, Slack, or other means. Covers both committed (with full commit metadata) and uncommitted changes.",
|
|
"tags": ["patch", "diff", "sharing", "email", "collaboration"],
|
|
"author": "mike-rambil",
|
|
"last_updated": "2024-06-10",
|
|
"subtoc": [
|
|
{
|
|
"Name": "Create Patch from Last Commit(s)",
|
|
"category": "Patch & Diff",
|
|
"command": "git format-patch HEAD~1",
|
|
"examples": [
|
|
{
|
|
"code": "git format-patch HEAD~1",
|
|
"description": "Create a .patch file for the last commit."
|
|
},
|
|
{
|
|
"code": "git format-patch origin/main..HEAD --stdout > my-changes.patch",
|
|
"description": "Create a single patch file for all commits on top of main."
|
|
},
|
|
{
|
|
"code": "git format-patch -2",
|
|
"description": "Create patch files for the last two commits."
|
|
},
|
|
{
|
|
"code": "git format-patch -2 origin/main..HEAD",
|
|
"description": "Create patch files for all commits since main."
|
|
}
|
|
],
|
|
"steps": [
|
|
"Run 'git format-patch HEAD~1' to create a patch for the last commit.",
|
|
"Use 'git format-patch origin/main..HEAD --stdout > my-changes.patch' to create a single patch file for multiple commits."
|
|
],
|
|
"warnings": [
|
|
"Patch files created this way include commit messages, authorship, and timestamps.",
|
|
"Use 'git am' to apply these patches on another system."
|
|
],
|
|
"tags": ["patch", "format-patch", "committed"],
|
|
"links": [
|
|
{
|
|
"label": "Official Docs",
|
|
"url": "https://git-scm.com/docs/git-format-patch"
|
|
}
|
|
],
|
|
"author": "mike-rambil",
|
|
"last_updated": "2024-06-10"
|
|
},
|
|
{
|
|
"Name": "Apply Patch with Commit Metadata",
|
|
"category": "Patch & Diff",
|
|
"command": "git am my-changes.patch",
|
|
"examples": [
|
|
{
|
|
"code": "git am my-changes.patch",
|
|
"description": "Apply a patch file and preserve commit info."
|
|
},
|
|
{
|
|
"code": "git am --signoff my-changes.patch",
|
|
"description": "Apply a patch and add a Signed-off-by line."
|
|
}
|
|
],
|
|
"steps": [
|
|
"Run 'git am my-changes.patch' to apply the patch and preserve commit messages, authorship, and timestamps."
|
|
],
|
|
"tags": ["patch", "am", "apply"],
|
|
"author": "mike-rambil",
|
|
"last_updated": "2024-06-10"
|
|
},
|
|
{
|
|
"Name": "Create Patch from Uncommitted Changes",
|
|
"category": "Patch & Diff",
|
|
"command": "git diff > changes.diff",
|
|
"examples": [
|
|
{
|
|
"code": "git diff > changes.diff",
|
|
"description": "Create a diff file of uncommitted changes."
|
|
},
|
|
{
|
|
"code": "git diff HEAD~1 > last-commit.diff",
|
|
"description": "Create a diff file for the last commit."
|
|
}
|
|
],
|
|
"steps": [
|
|
"Run 'git diff > changes.diff' to save uncommitted changes to a file."
|
|
],
|
|
"warnings": [
|
|
"This does NOT preserve commit metadata or history—just raw changes."
|
|
],
|
|
"tags": ["diff", "uncommitted", "snapshot"],
|
|
"links": [
|
|
{
|
|
"label": "Official Docs",
|
|
"url": "https://git-scm.com/docs/git-diff"
|
|
}
|
|
],
|
|
"author": "mike-rambil",
|
|
"last_updated": "2024-06-10"
|
|
},
|
|
{
|
|
"Name": "Apply Diff File",
|
|
"category": "Patch & Diff",
|
|
"command": "git apply changes.diff",
|
|
"examples": [
|
|
{
|
|
"code": "git apply changes.diff",
|
|
"description": "Apply a diff file of uncommitted changes."
|
|
},
|
|
{
|
|
"code": "git apply --stat changes.diff",
|
|
"description": "Show what would change if the diff were applied."
|
|
}
|
|
],
|
|
"steps": [
|
|
"Run 'git apply changes.diff' to apply the changes from a diff file."
|
|
],
|
|
"tags": ["diff", "apply", "uncommitted"],
|
|
"author": "mike-rambil",
|
|
"last_updated": "2024-06-10"
|
|
},
|
|
{
|
|
"Name": "Patch vs Diff: Quick Reference",
|
|
"category": "Patch & Diff",
|
|
"long_description": "| Command | Use Case | Preserves Commit Info? | Can Apply With |\n|---|---|---|---|\n| git diff > file.diff | Share uncommitted changes | ❌ | git apply |\n| git format-patch > file.patch | Share committed changes | ✅ | git am |",
|
|
"tags": ["patch", "diff", "reference"],
|
|
"author": "mike-rambil",
|
|
"last_updated": "2024-06-10"
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"Name": "Pull Changes of Specific Files from a Commit",
|
|
"category": "Selective File Restore",
|
|
"short_description": "Restore or pull changes for specific files from a past commit without reverting the entire commit.",
|
|
"long_description": "How to use git to pull or restore changes for only certain files from a specific commit, without affecting the rest of your working directory or reverting the whole commit. Useful for cherry-picking file-level changes.",
|
|
"command": "git checkout <commit-hash> -- <file1> <file2>",
|
|
"examples": [
|
|
{
|
|
"code": "git checkout e8ab7f64fdfcc7bdaaed8d96c0ac26dce035663f -- path/to/file1.txt path/to/file2.txt",
|
|
"description": "Restore file1.txt and file2.txt from the specified commit."
|
|
},
|
|
{
|
|
"code": "git add path/to/file1.txt path/to/file2.txt\ngit commit -m \"Pulled changes for file1.txt and file2.txt from commit e8ab7f64\"\ngit push origin revert/productionOrder",
|
|
"description": "Stage, commit, and push the restored files to a new branch."
|
|
},
|
|
{
|
|
"code": "git restore --source e8ab7f64fdfcc7bdaaed8d96c0ac26dce035663f path/to/file1.txt path/to/file2.txt",
|
|
"description": "Restore files using the newer 'git restore' command."
|
|
}
|
|
],
|
|
"steps": [
|
|
"Checkout the specific files from the desired commit using 'git checkout <commit-hash> -- <file1> <file2>'.",
|
|
"Stage the changes with 'git add <file1> <file2>'.",
|
|
"Commit the changes with a descriptive message.",
|
|
"Push your branch and create a pull request if needed."
|
|
],
|
|
"warnings": [
|
|
"This will overwrite the current working directory versions of the specified files.",
|
|
"Make sure to commit or stash any local changes to those files before running the command."
|
|
],
|
|
"tags": ["checkout", "restore", "file", "commit", "cherry-pick"],
|
|
"author": "mike-rambil",
|
|
"last_updated": "2024-06-10",
|
|
"links": [
|
|
{
|
|
"label": "Git Docs: git checkout",
|
|
"url": "https://git-scm.com/docs/git-checkout"
|
|
}
|
|
]
|
|
}
|
|
]
|