mirror of
https://github.com/mike-rambil/Advanced-Git.git
synced 2026-02-19 23:28:42 -06:00
chore: auto-generate README.md from toc-source.json
This commit is contained in:
@@ -19,6 +19,12 @@ git apply changes.diff
|
||||
```sh
|
||||
git apply changes.diff
|
||||
```
|
||||
- **Show what would change if the diff were applied.**
|
||||
|
||||
|
||||
```sh
|
||||
git apply --stat changes.diff
|
||||
```
|
||||
|
||||
|
||||
#### Steps
|
||||
|
||||
@@ -19,6 +19,12 @@ git am my-changes.patch
|
||||
```sh
|
||||
git am my-changes.patch
|
||||
```
|
||||
- **Apply a patch and add a Signed-off-by line.**
|
||||
|
||||
|
||||
```sh
|
||||
git am --signoff my-changes.patch
|
||||
```
|
||||
|
||||
|
||||
#### Steps
|
||||
|
||||
@@ -17,6 +17,12 @@ git worktree list
|
||||
```sh
|
||||
git worktree list
|
||||
```
|
||||
- **List worktrees in a machine-readable format.**
|
||||
|
||||
|
||||
```sh
|
||||
git worktree list --porcelain
|
||||
```
|
||||
|
||||
|
||||
#### Steps
|
||||
|
||||
@@ -6,6 +6,15 @@
|
||||

|
||||
> Quickly view and clean up local branches using Bash or PowerShell, including removing branches whose remote is gone.
|
||||
|
||||
|
||||
#### ProTips
|
||||
> [!TIP]
|
||||
> Run 'git fetch -p' before cleaning up branches to update remote info.
|
||||
|
||||
> [!TIP]
|
||||
> Always double-check which branches will be deleted.
|
||||
|
||||
|
||||
## Key Topics & Subcommands
|
||||
- [Delete Local Branches Whose Remote is Gone (Bash)](./delete-local-branches-whose-remote-is-gone-bash.md): Delete all local branches whose remote counterpart has been deleted, using Bash.
|
||||
- [Delete Local Branches Whose Remote is Gone (PowerShell)](./delete-local-branches-whose-remote-is-gone-powershell.md): Delete all local branches whose remote counterpart has been deleted, using PowerShell.
|
||||
|
||||
@@ -19,6 +19,12 @@ git worktree add <path> <branch>
|
||||
```sh
|
||||
git worktree add ../feature-branch feature
|
||||
```
|
||||
- **Create a worktree for a hotfix branch.**
|
||||
|
||||
|
||||
```sh
|
||||
git worktree add ../hotfix hotfix-branch
|
||||
```
|
||||
|
||||
|
||||
#### Steps
|
||||
|
||||
@@ -23,6 +23,18 @@ git format-patch HEAD~1
|
||||
```sh
|
||||
git format-patch origin/main..HEAD --stdout > my-changes.patch
|
||||
```
|
||||
- **Create patch files for the last two commits.**
|
||||
|
||||
|
||||
```sh
|
||||
git format-patch -2
|
||||
```
|
||||
- **Create patch files for all commits since main.**
|
||||
|
||||
|
||||
```sh
|
||||
git format-patch -2 origin/main..HEAD
|
||||
```
|
||||
|
||||
|
||||
#### Steps
|
||||
|
||||
@@ -19,6 +19,12 @@ git diff > changes.diff
|
||||
```sh
|
||||
git diff > changes.diff
|
||||
```
|
||||
- **Create a diff file for the last commit.**
|
||||
|
||||
|
||||
```sh
|
||||
git diff HEAD~1 > last-commit.diff
|
||||
```
|
||||
|
||||
|
||||
#### Steps
|
||||
|
||||
@@ -19,6 +19,12 @@ git fetch -p && git branch -vv | grep '\[origin/.*: gone\]' | awk '{print $1}' |
|
||||
```sh
|
||||
git fetch -p && git branch -vv | grep '\[origin/.*: gone\]' | awk '{print $1}' | xargs -r git branch -d
|
||||
```
|
||||
- **Delete only feature branches whose remote is gone.**
|
||||
|
||||
|
||||
```sh
|
||||
git fetch -p && git branch -vv | grep '\[origin/feature: gone\]' | awk '{print $1}' | xargs -r git branch -d
|
||||
```
|
||||
|
||||
|
||||
#### Steps
|
||||
@@ -32,6 +38,15 @@ git fetch -p && git branch -vv | grep '\[origin/.*: gone\]' | awk '{print $1}' |
|
||||
- ⚠️ Make sure you have no unmerged work on these branches.
|
||||
|
||||
|
||||
#### ProTips
|
||||
> [!TIP]
|
||||
> Use this after deleting branches on the remote to keep your local repo tidy.
|
||||
|
||||
> [!TIP]
|
||||
> Add 'echo' before 'git branch -d' to preview what will be deleted.
|
||||
|
||||
|
||||
|
||||
[➡️ See the Next Step: Delete Local Branches Whose Remote is Gone (PowerShell)](./delete-local-branches-whose-remote-is-gone-powershell.md)
|
||||
|
||||
---
|
||||
|
||||
@@ -23,6 +23,13 @@ git branch -vv | ForEach-Object { if ($_ -match '\[.*: gone\]') { $parts = $_.Tr
|
||||
git fetch -p
|
||||
git branch -vv | ForEach-Object { if ($_ -match '[.*: gone]') { $parts = $_.Trim() -split '\s+'; $branch = $parts[0]; if ($branch -ne '') { git branch -d $branch } } }
|
||||
```
|
||||
- **Delete only feature branches whose remote is gone.**
|
||||
|
||||
|
||||
```sh
|
||||
git fetch -p
|
||||
git branch -vv | ForEach-Object { if ($_ -match '[origin/feature: gone]') { $parts = $_.Trim() -split 's+'; $branch = $parts[0]; if ($branch -ne '') { git branch -d $branch } } }
|
||||
```
|
||||
|
||||
|
||||
#### Steps
|
||||
@@ -36,6 +43,15 @@ git branch -vv | ForEach-Object { if ($_ -match '[.*: gone]') { $parts = $_.Trim
|
||||
- ⚠️ Make sure you have no unmerged work on these branches.
|
||||
|
||||
|
||||
#### ProTips
|
||||
> [!TIP]
|
||||
> Great for Windows users to automate branch cleanup.
|
||||
|
||||
> [!TIP]
|
||||
> Review the list before confirming deletion.
|
||||
|
||||
|
||||
|
||||
[➡️ See the Next Step: View and Clean Up Local Git Branches (Bash)](./view-and-clean-up-local-git-branches-bash.md)
|
||||
|
||||
---
|
||||
|
||||
@@ -48,6 +48,12 @@ git clean -f -d
|
||||
```sh
|
||||
git clean -i
|
||||
```
|
||||
- **Delete untracked and ignored files.**
|
||||
|
||||
|
||||
```sh
|
||||
git clean -f -x
|
||||
```
|
||||
|
||||
|
||||
#### Steps
|
||||
|
||||
@@ -21,6 +21,12 @@ git clone --mirror https://github.com/example/repo.git
|
||||
```sh
|
||||
git clone --mirror https://github.com/example/repo.git
|
||||
```
|
||||
- **Mirror-clone a private repo using SSH.**
|
||||
|
||||
|
||||
```sh
|
||||
git clone --mirror git@github.com:org/repo.git
|
||||
```
|
||||
|
||||
|
||||
#### Steps
|
||||
|
||||
@@ -8,6 +8,15 @@
|
||||
|
||||
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.
|
||||
|
||||
|
||||
#### ProTips
|
||||
> [!TIP]
|
||||
> Try these commands in a test repo before using them on important projects.
|
||||
|
||||
> [!TIP]
|
||||
> Bookmark this section for quick reference to hidden gems.
|
||||
|
||||
|
||||
## Key Topics & Subcommands
|
||||
- [git maintenance start](./git-maintenance-start.md): Runs a cronJob in background for the specified repo for periodic maintenance.
|
||||
- [git request-pull](./git-request-pull.md): Generate a request to pull changes into a repository.
|
||||
|
||||
@@ -19,6 +19,12 @@ git init --bare my-repo.git
|
||||
```sh
|
||||
git init --bare my-repo.git
|
||||
```
|
||||
- **Initialize a bare repo in a custom directory for server hosting.**
|
||||
|
||||
|
||||
```sh
|
||||
git init --bare /srv/git/project.git
|
||||
```
|
||||
|
||||
|
||||
#### Steps
|
||||
|
||||
@@ -19,12 +19,27 @@ git maintenance start
|
||||
```sh
|
||||
git maintenance start
|
||||
```
|
||||
- **Run maintenance tasks every hour for more active repos.**
|
||||
|
||||
|
||||
```sh
|
||||
git maintenance start --schedule=hourly
|
||||
```
|
||||
|
||||
|
||||
#### Steps
|
||||
1. Run `git maintenance start` in your repository.
|
||||
|
||||
|
||||
#### ProTips
|
||||
> [!TIP]
|
||||
> Set up maintenance on large repos to keep them fast.
|
||||
|
||||
> [!TIP]
|
||||
> Use with cron or scheduled tasks for automation.
|
||||
|
||||
|
||||
|
||||
#### Links
|
||||
- [Official Docs](https://git-scm.com/docs/git-maintenance)
|
||||
|
||||
|
||||
@@ -19,6 +19,12 @@ git replace abc123 def456
|
||||
```sh
|
||||
git replace abc123 def456
|
||||
```
|
||||
- **Graft a new parent onto a commit for testing history changes.**
|
||||
|
||||
|
||||
```sh
|
||||
git replace --graft HEAD~2 HEAD
|
||||
```
|
||||
|
||||
|
||||
#### Steps
|
||||
|
||||
@@ -21,12 +21,27 @@ git request-pull <start> <url> <end>
|
||||
```sh
|
||||
git request-pull v1.0 https://github.com/example/repo.git v1.1
|
||||
```
|
||||
- **Request a pull for a feature branch based on main.**
|
||||
|
||||
|
||||
```sh
|
||||
git request-pull main https://github.com/example/repo.git feature-branch
|
||||
```
|
||||
|
||||
|
||||
#### Steps
|
||||
1. Run `git request-pull <start> <url> <end>` to generate a pull request message.
|
||||
|
||||
|
||||
#### ProTips
|
||||
> [!TIP]
|
||||
> Use request-pull to generate a summary for code reviews.
|
||||
|
||||
> [!TIP]
|
||||
> Include a clear start and end point for clarity.
|
||||
|
||||
|
||||
|
||||
#### Links
|
||||
- [Official Docs](https://git-scm.com/docs/git-request-pull)
|
||||
|
||||
|
||||
@@ -21,6 +21,12 @@ git push --force-with-lease
|
||||
```sh
|
||||
git push --force-with-lease
|
||||
```
|
||||
- **Force-push a specific branch with lease protection.**
|
||||
|
||||
|
||||
```sh
|
||||
git push --force-with-lease origin feature-branch
|
||||
```
|
||||
|
||||
|
||||
#### Steps
|
||||
|
||||
@@ -29,6 +29,12 @@ git add path/to/file1.txt path/to/file2.txt
|
||||
git commit -m "Pulled changes for file1.txt and file2.txt from commit e8ab7f64"
|
||||
git push origin revert/productionOrder
|
||||
```
|
||||
- **Restore files using the newer 'git restore' command.**
|
||||
|
||||
|
||||
```sh
|
||||
git restore --source e8ab7f64fdfcc7bdaaed8d96c0ac26dce035663f path/to/file1.txt path/to/file2.txt
|
||||
```
|
||||
|
||||
|
||||
#### Steps
|
||||
|
||||
@@ -19,6 +19,12 @@ git worktree remove <worktree-path>
|
||||
```sh
|
||||
git worktree remove ../feature-branch
|
||||
```
|
||||
- **Remove a hotfix worktree.**
|
||||
|
||||
|
||||
```sh
|
||||
git worktree remove ../hotfix
|
||||
```
|
||||
|
||||
|
||||
#### Steps
|
||||
|
||||
@@ -19,6 +19,12 @@ git blame filename.txt
|
||||
```sh
|
||||
git blame filename.txt
|
||||
```
|
||||
- **Blame only lines 10 to 20 of a file.**
|
||||
|
||||
|
||||
```sh
|
||||
git blame -L 10,20 filename.txt
|
||||
```
|
||||
|
||||
|
||||
#### Steps
|
||||
|
||||
@@ -17,6 +17,12 @@ git log --oneline -- filename.txt
|
||||
```sh
|
||||
git log --oneline -- filename.txt
|
||||
```
|
||||
- **Show commit history for a different file.**
|
||||
|
||||
|
||||
```sh
|
||||
git log --oneline -- path/to/anotherfile.js
|
||||
```
|
||||
|
||||
|
||||
#### Steps
|
||||
|
||||
@@ -19,6 +19,12 @@ git log --pretty=format:"%h - %an, %ar : %s" -- filename.txt
|
||||
```sh
|
||||
git log --pretty=format:"%h - %an, %ar : %s" -- filename.txt
|
||||
```
|
||||
- **Show commit hash, short date, author, and message.**
|
||||
|
||||
|
||||
```sh
|
||||
git log --pretty=format:'%h | %ad | %an | %s' --date=short -- filename.txt
|
||||
```
|
||||
|
||||
|
||||
#### Steps
|
||||
|
||||
@@ -19,6 +19,12 @@ git log -p -- filename.txt
|
||||
```sh
|
||||
git log -p -- filename.txt
|
||||
```
|
||||
- **Show the last two commits and their changes for a file.**
|
||||
|
||||
|
||||
```sh
|
||||
git log -p -2 -- filename.txt
|
||||
```
|
||||
|
||||
|
||||
#### Steps
|
||||
|
||||
@@ -17,6 +17,12 @@
|
||||
```sh
|
||||
cd ../feature-branch
|
||||
```
|
||||
- **Switch to a hotfix worktree.**
|
||||
|
||||
|
||||
```sh
|
||||
cd ../hotfix
|
||||
```
|
||||
|
||||
|
||||
#### Steps
|
||||
|
||||
@@ -19,6 +19,12 @@ git worktree add ../hotfix hotfix-branch
|
||||
```sh
|
||||
git worktree add ../hotfix hotfix-branch
|
||||
```
|
||||
- **Create a worktree for a bugfix branch.**
|
||||
|
||||
|
||||
```sh
|
||||
git worktree add ../bugfix bugfix-branch
|
||||
```
|
||||
|
||||
|
||||
#### Steps
|
||||
|
||||
@@ -22,6 +22,12 @@ git branch -vv | grep -E '^\s*\S+\s+[^\[]+$'
|
||||
```sh
|
||||
git branch -vv | grep -E '^\s*\S+\s+[^\[]+$' | awk '{print $1}' | xargs git branch -D
|
||||
```
|
||||
- **List branches whose remote is gone.**
|
||||
|
||||
|
||||
```sh
|
||||
git branch -vv | grep 'gone'
|
||||
```
|
||||
|
||||
|
||||
#### Steps
|
||||
@@ -35,6 +41,15 @@ git branch -vv | grep -E '^\s*\S+\s+[^\[]+$' | awk '{print $1}' | xargs git bran
|
||||
- ⚠️ Deleting branches is irreversible. Double-check before running destructive commands.
|
||||
|
||||
|
||||
#### ProTips
|
||||
> [!TIP]
|
||||
> Use 'git branch -vv' to see tracking info for all branches.
|
||||
|
||||
> [!TIP]
|
||||
> Pipe to 'awk' and 'xargs' for batch deletion.
|
||||
|
||||
|
||||
|
||||
[➡️ See the Next Step: View and Clean Up Local Git Branches (PowerShell)](./view-and-clean-up-local-git-branches-powershell.md)
|
||||
|
||||
---
|
||||
|
||||
@@ -22,6 +22,12 @@ git branch -vv | Select-String -NotMatch "origin/"
|
||||
```sh
|
||||
git branch -vv | Select-String -NotMatch "origin/" | ForEach-Object { $branch = ($_ -split "\s+")[1]; git branch -D $branch }
|
||||
```
|
||||
- **List branches whose remote is gone.**
|
||||
|
||||
|
||||
```sh
|
||||
git branch -vv | Select-String 'gone'
|
||||
```
|
||||
|
||||
|
||||
#### Steps
|
||||
@@ -35,6 +41,15 @@ git branch -vv | Select-String -NotMatch "origin/" | ForEach-Object { $branch =
|
||||
- ⚠️ Deleting branches is irreversible. Double-check before running destructive commands.
|
||||
|
||||
|
||||
#### ProTips
|
||||
> [!TIP]
|
||||
> Use PowerShell's 'Select-String' for flexible filtering.
|
||||
|
||||
> [!TIP]
|
||||
> Automate cleanup with a script for regular maintenance.
|
||||
|
||||
|
||||
|
||||
---
|
||||
|
||||
_Author: mike-rambil • Updated: 2024-06-10 • Tags: branches, cleanup, powershell_
|
||||
|
||||
Reference in New Issue
Block a user