diff --git a/infosec/github-commands.md b/infosec/github-commands.md new file mode 100644 index 0000000..5489475 --- /dev/null +++ b/infosec/github-commands.md @@ -0,0 +1,67 @@ +# GitHub Repository Cheatsheet + +## Quick Reference Guide for Git and GitHub Workflows + +| Command | Description | Example | Notes | +|---------|-------------|---------|-------| +| **Repository Setup** |||| +| `git init` | Initialize a new local repository | `git init my-project` | Creates a new .git directory | +| `git clone [url]` | Clone a repository from remote | `git clone https://github.com/user/repo.git` | Downloads full history | +| `git remote add origin [url]` | Connect local repo to remote | `git remote add origin https://github.com/user/repo.git` | Sets up "origin" remote | +| `git remote -v` | List remote connections | `git remote -v` | Shows fetch/push URLs | +| **Basic Workflow** |||| +| `git status` | Check repository status | `git status` | Shows modified/staged files | +| `git add [file]` | Stage changes | `git add index.html` or `git add .` | Prepares files for commit | +| `git commit -m "[message]"` | Commit staged changes | `git commit -m "Fix navigation bug"` | Creates a commit snapshot | +| `git pull` | Fetch and merge remote changes | `git pull origin main` | Updates local branch | +| `git push` | Push commits to remote | `git push origin main` | Uploads local commits | +| **Branching** |||| +| `git branch` | List local branches | `git branch` | Current branch has asterisk | +| `git branch [name]` | Create new branch | `git branch feature-login` | Creates branch at current commit | +| `git checkout [branch]` | Switch branches | `git checkout feature-login` | Updates working directory | +| `git checkout -b [name]` | Create and checkout branch | `git checkout -b feature-login` | Combines branch + checkout | +| `git merge [branch]` | Merge branch into current | `git merge feature-login` | Integrates branch changes | +| `git branch -d [name]` | Delete branch | `git branch -d feature-login` | Removes merged branch | +| `git branch -D [name]` | Force delete branch | `git branch -D feature-login` | Removes unmerged branch | +| **Branching Strategies** |||| +| Git Flow | Main/Develop with feature branches | `git checkout -b feature/login develop` | Complex but structured | +| GitHub Flow | Single main with feature branches | `git checkout -b feature-login main` | Simpler, PR-based | +| Trunk-Based | Short-lived branches off main | `git checkout -b fix-404-error main` | Quick integration cycles | +| **Pull Request Workflow** |||| +| Create PR | Via GitHub UI | Click "New pull request" on repo page | Compare branches | +| Review PR | Via GitHub UI | Add comments, request changes | Code review process | +| Merge PR | Via GitHub UI | Click "Merge pull request" | Can squash or rebase | +| `git fetch origin pull/ID/head:BRANCHNAME` | Get PR locally | `git fetch origin pull/123/head:pr-123` | For local PR testing | +| **History & Changes** |||| +| `git log` | View commit history | `git log --oneline` | Shows commit list | +| `git diff` | Show unstaged changes | `git diff` | Compare working to staged | +| `git diff --staged` | Show staged changes | `git diff --staged` | Compare staged to last commit | +| `git reset HEAD [file]` | Unstage changes | `git reset HEAD index.html` | Keeps file changes | +| `git checkout -- [file]` | Discard changes | `git checkout -- index.html` | Loses uncommitted changes | +| **Advanced Commands** |||| +| `git stash` | Stash uncommitted changes | `git stash save "WIP homepage"` | Temporarily stores changes | +| `git stash pop` | Apply stashed changes | `git stash pop` | Reapplies and drops stash | +| `git rebase [branch]` | Reapply commits on branch | `git rebase main` | Rewrites commit history | +| `git tag [name]` | Create a tag | `git tag v1.0.0` | Marks specific commit | +| `git cherry-pick [commit]` | Apply commit to current branch | `git cherry-pick abc123` | Takes single commit | + +## Common Branching Strategies + +1. **Git Flow** + - `main` - production-ready code + - `develop` - integration branch for features + - `feature/*` - new features + - `release/*` - prepare for release + - `hotfix/*` - urgent production fixes + +2. **GitHub Flow** + - `main` - always deployable + - feature branches - all work happens here + - pull requests - for code review and discussion + - deploy after merge to main + +3. **Trunk-Based Development** + - `main` - primary branch + - short-lived feature branches + - frequent integration to main + - feature flags for incomplete work