commit ec51230c66ed82d79430abf39f1230fa7bbec58c Author: zlei9 Date: Sun Mar 29 08:23:24 2026 +0800 Initial commit with translated description diff --git a/SKILL.md b/SKILL.md new file mode 100644 index 0000000..fa1cfba --- /dev/null +++ b/SKILL.md @@ -0,0 +1,431 @@ +--- +name: git-essentials +description: "用于版本控制、分支和协作的Git基础命令和工作流。" +homepage: https://git-scm.com/ +metadata: {"clawdbot":{"emoji":"🌳","requires":{"bins":["git"]}}} +--- + +# Git Essentials + +Essential Git commands for version control and collaboration. + +## Initial Setup + +```bash +# Configure user +git config --global user.name "Your Name" +git config --global user.email "your@email.com" + +# Initialize repository +git init + +# Clone repository +git clone https://github.com/user/repo.git +git clone https://github.com/user/repo.git custom-name +``` + +## Basic Workflow + +### Staging and committing +```bash +# Check status +git status + +# Add files to staging +git add file.txt +git add . +git add -A # All changes including deletions + +# Commit changes +git commit -m "Commit message" + +# Add and commit in one step +git commit -am "Message" + +# Amend last commit +git commit --amend -m "New message" +git commit --amend --no-edit # Keep message +``` + +### Viewing changes +```bash +# Show unstaged changes +git diff + +# Show staged changes +git diff --staged + +# Show changes in specific file +git diff file.txt + +# Show changes between commits +git diff commit1 commit2 +``` + +## Branching & Merging + +### Branch management +```bash +# List branches +git branch +git branch -a # Include remote branches + +# Create branch +git branch feature-name + +# Switch branch +git checkout feature-name +git switch feature-name # Modern alternative + +# Create and switch +git checkout -b feature-name +git switch -c feature-name + +# Delete branch +git branch -d branch-name +git branch -D branch-name # Force delete + +# Rename branch +git branch -m old-name new-name +``` + +### Merging +```bash +# Merge branch into current +git merge feature-name + +# Merge with no fast-forward +git merge --no-ff feature-name + +# Abort merge +git merge --abort + +# Show merge conflicts +git diff --name-only --diff-filter=U +``` + +## Remote Operations + +### Managing remotes +```bash +# List remotes +git remote -v + +# Add remote +git remote add origin https://github.com/user/repo.git + +# Change remote URL +git remote set-url origin https://github.com/user/new-repo.git + +# Remove remote +git remote remove origin +``` + +### Syncing with remote +```bash +# Fetch from remote +git fetch origin + +# Pull changes (fetch + merge) +git pull + +# Pull with rebase +git pull --rebase + +# Push changes +git push + +# Push new branch +git push -u origin branch-name + +# Force push (careful!) +git push --force-with-lease +``` + +## History & Logs + +### Viewing history +```bash +# Show commit history +git log + +# One line per commit +git log --oneline + +# With graph +git log --graph --oneline --all + +# Last N commits +git log -5 + +# Commits by author +git log --author="Name" + +# Commits in date range +git log --since="2 weeks ago" +git log --until="2024-01-01" + +# File history +git log -- file.txt +``` + +### Searching history +```bash +# Search commit messages +git log --grep="bug fix" + +# Search code changes +git log -S "function_name" + +# Show who changed each line +git blame file.txt + +# Find commit that introduced bug +git bisect start +git bisect bad +git bisect good commit-hash +``` + +## Undoing Changes + +### Working directory +```bash +# Discard changes in file +git restore file.txt +git checkout -- file.txt # Old way + +# Discard all changes +git restore . +``` + +### Staging area +```bash +# Unstage file +git restore --staged file.txt +git reset HEAD file.txt # Old way + +# Unstage all +git reset +``` + +### Commits +```bash +# Undo last commit (keep changes) +git reset --soft HEAD~1 + +# Undo last commit (discard changes) +git reset --hard HEAD~1 + +# Revert commit (create new commit) +git revert commit-hash + +# Reset to specific commit +git reset --hard commit-hash +``` + +## Stashing + +```bash +# Stash changes +git stash + +# Stash with message +git stash save "Work in progress" + +# List stashes +git stash list + +# Apply latest stash +git stash apply + +# Apply and remove stash +git stash pop + +# Apply specific stash +git stash apply stash@{2} + +# Delete stash +git stash drop stash@{0} + +# Clear all stashes +git stash clear +``` + +## Rebasing + +```bash +# Rebase current branch +git rebase main + +# Interactive rebase (last 3 commits) +git rebase -i HEAD~3 + +# Continue after resolving conflicts +git rebase --continue + +# Skip current commit +git rebase --skip + +# Abort rebase +git rebase --abort +``` + +## Tags + +```bash +# List tags +git tag + +# Create lightweight tag +git tag v1.0.0 + +# Create annotated tag +git tag -a v1.0.0 -m "Version 1.0.0" + +# Tag specific commit +git tag v1.0.0 commit-hash + +# Push tag +git push origin v1.0.0 + +# Push all tags +git push --tags + +# Delete tag +git tag -d v1.0.0 +git push origin --delete v1.0.0 +``` + +## Advanced Operations + +### Cherry-pick +```bash +# Apply specific commit +git cherry-pick commit-hash + +# Cherry-pick without committing +git cherry-pick -n commit-hash +``` + +### Submodules +```bash +# Add submodule +git submodule add https://github.com/user/repo.git path/ + +# Initialize submodules +git submodule init + +# Update submodules +git submodule update + +# Clone with submodules +git clone --recursive https://github.com/user/repo.git +``` + +### Clean +```bash +# Preview files to be deleted +git clean -n + +# Delete untracked files +git clean -f + +# Delete untracked files and directories +git clean -fd + +# Include ignored files +git clean -fdx +``` + +## Common Workflows + +**Feature branch workflow:** +```bash +git checkout -b feature/new-feature +# Make changes +git add . +git commit -m "Add new feature" +git push -u origin feature/new-feature +# Create PR, then after merge: +git checkout main +git pull +git branch -d feature/new-feature +``` + +**Hotfix workflow:** +```bash +git checkout main +git pull +git checkout -b hotfix/critical-bug +# Fix bug +git commit -am "Fix critical bug" +git push -u origin hotfix/critical-bug +# After merge: +git checkout main && git pull +``` + +**Syncing fork:** +```bash +git remote add upstream https://github.com/original/repo.git +git fetch upstream +git checkout main +git merge upstream/main +git push origin main +``` + +## Useful Aliases + +Add to `~/.gitconfig`: +```ini +[alias] + st = status + co = checkout + br = branch + ci = commit + unstage = reset HEAD -- + last = log -1 HEAD + visual = log --graph --oneline --all + amend = commit --amend --no-edit +``` + +## Tips + +- Commit often, perfect later (interactive rebase) +- Write meaningful commit messages +- Use `.gitignore` for files to exclude +- Never force push to shared branches +- Pull before starting work +- Use feature branches, not main +- Rebase feature branches before merging +- Use `--force-with-lease` instead of `--force` + +## Common Issues + +**Undo accidental commit:** +```bash +git reset --soft HEAD~1 +``` + +**Recover deleted branch:** +```bash +git reflog +git checkout -b branch-name +``` + +**Fix wrong commit message:** +```bash +git commit --amend -m "Correct message" +``` + +**Resolve merge conflicts:** +```bash +# Edit files to resolve conflicts +git add resolved-files +git commit # Or git merge --continue +``` + +## Documentation + +Official docs: https://git-scm.com/doc +Pro Git book: https://git-scm.com/book +Visual Git guide: https://marklodato.github.io/visual-git-guide/ diff --git a/_meta.json b/_meta.json new file mode 100644 index 0000000..dbb73d5 --- /dev/null +++ b/_meta.json @@ -0,0 +1,6 @@ +{ + "ownerId": "kn7anq2d7gcch060anc2j9cg89800dyv", + "slug": "git-essentials", + "version": "1.0.0", + "publishedAt": 1769692045864 +} \ No newline at end of file