When to use this skill
何时使用此技能
- Creating meaningful commit messages
- Managing branches
- Merging code
- Resolving conflicts
- Collaborating with team
- Git best practices
- 撰写有意义的提交信息
- 管理分支
- 代码合并
- 解决冲突
- 团队协作
- Git最佳实践
Step 1: Branch management
步骤1:分支管理
Create and switch to new branch
Create and switch to new branch
git checkout -b feature/feature-name
git checkout -b feature/feature-name
Or create from specific commit
Or create from specific commit
git checkout -b feature/feature-name <commit-hash>
**Naming conventions**:
- `feature/description`: New features
- `bugfix/description`: Bug fixes
- `hotfix/description`: Urgent fixes
- `refactor/description`: Code refactoring
- `docs/description`: Documentation updates
git checkout -b feature/feature-name <commit-hash>
**命名规范**:
- `feature/description`: 新功能
- `bugfix/description`: Bug修复
- `hotfix/description`: 紧急修复
- `refactor/description`: 代码重构
- `docs/description`: 文档更新
Step 2: Making changes
步骤2:进行修改
Stage specific files
Stage specific files
git add file1.py file2.js
git add file1.py file2.js
Stage all changes
Stage all changes
Stage with patch mode (interactive)
Stage with patch mode (interactive)
git add -p
**Check status**:
```bash
See what's changed
See what's changed
See detailed diff
See detailed diff
See staged diff
See staged diff
Step 3: Committing
步骤3:提交代码
Write good commit messages:
bash
git commit -m "type(scope): subject
Detailed description of what changed and why.
- Change 1
- Change 2
Fixes #123"
Commit types:
- : New feature
- : Bug fix
- : Documentation
- : Formatting, no code change
- : Code refactoring
- : Adding tests
- : Maintenance
Example:
bash
git commit -m "feat(auth): add JWT authentication
- Implement JWT token generation
- Add token validation middleware
- Update user model with refresh token
Closes #42"
撰写优质提交信息:
bash
git commit -m "type(scope): subject
Detailed description of what changed and why.
- Change 1
- Change 2
Fixes #123"
提交类型:
- : 新功能
- : Bug修复
- : 文档更新
- : 格式调整,无代码变更
- : 代码重构
- : 添加测试
- : 维护工作
示例:
bash
git commit -m "feat(auth): add JWT authentication
- Implement JWT token generation
- Add token validation middleware
- Update user model with refresh token
Closes #42"
Step 4: Pushing changes
步骤4:推送修改
Push to remote
Push to remote
git push origin feature/feature-name
git push origin feature/feature-name
Force push (use with caution!)
Force push (use with caution!)
git push origin feature/feature-name --force-with-lease
git push origin feature/feature-name --force-with-lease
Set upstream and push
Set upstream and push
git push -u origin feature/feature-name
git push -u origin feature/feature-name
Step 5: Pulling and updating
步骤5:拉取与更新
Pull latest changes
Pull latest changes
Pull with rebase (cleaner history)
Pull with rebase (cleaner history)
git pull --rebase origin main
git pull --rebase origin main
Fetch without merging
Fetch without merging
Switch to main branch
Switch to main branch
Merge feature
Merge feature
git merge feature/feature-name
git merge feature/feature-name
Merge with no fast-forward (creates merge commit)
Merge with no fast-forward (creates merge commit)
git merge --no-ff feature/feature-name
**Rebase instead of merge**:
```bash
git merge --no-ff feature/feature-name
On feature branch
On feature branch
git checkout feature/feature-name
git checkout feature/feature-name
Rebase onto main
Rebase onto main
Continue after resolving conflicts
Continue after resolving conflicts
Step 7: Resolving conflicts
步骤7:解决冲突
See conflicted files
See conflicted files
Open files and resolve conflicts
Open files and resolve conflicts
Look for markers:
Look for markers:
<<<<<<< HEAD
Current branch code
Incoming branch code
feature-branch
<<<<<<< HEAD
Current branch code
Incoming branch code
feature-branch
After resolving
After resolving
git add <resolved-files>
git commit # For merge
git rebase --continue # For rebase
git add <resolved-files>
git commit # For merge
git rebase --continue # For rebase
Step 8: Cleaning up
步骤8:清理操作
Delete local branch
Delete local branch
git branch -d feature/feature-name
git branch -d feature/feature-name
git branch -D feature/feature-name
git branch -D feature/feature-name
Delete remote branch
Delete remote branch
git push origin --delete feature/feature-name
git push origin --delete feature/feature-name
Clean up stale references
Clean up stale references
Rebase last 3 commits
Rebase last 3 commits
Commands in editor:
Commands in editor:
pick: use commit
pick: use commit
reword: change commit message
reword: change commit message
edit: amend commit
edit: amend commit
squash: combine with previous
squash: combine with previous
fixup: like squash, discard message
fixup: like squash, discard message
drop: remove commit
drop: remove commit
Stash current changes
Stash current changes
Stash with message
Stash with message
git stash save "Work in progress on feature X"
git stash save "Work in progress on feature X"
Apply most recent stash
Apply most recent stash
Apply and remove stash
Apply and remove stash
Apply specific stash
Apply specific stash
git stash apply stash@{2}
git stash apply stash@{2}
Clear all stashes
Clear all stashes
Apply specific commit
Apply specific commit
git cherry-pick <commit-hash>
git cherry-pick <commit-hash>
Cherry-pick multiple commits
Cherry-pick multiple commits
git cherry-pick <hash1> <hash2> <hash3>
git cherry-pick <hash1> <hash2> <hash3>
Cherry-pick without committing
Cherry-pick without committing
git cherry-pick -n <commit-hash>
git cherry-pick -n <commit-hash>
Bisect (finding bugs)
二分查找(定位Bug)
Mark current as bad
Mark current as bad
Mark known good commit
Mark known good commit
git bisect good <commit-hash>
git bisect good <commit-hash>
Git will checkout commits to test
Git will checkout commits to test
Test and mark each:
Test and mark each:
git bisect good # if works
git bisect bad # if broken
git bisect good # if works
git bisect bad # if broken
When found, reset
When found, reset
Example 1: Feature development workflow
示例1:功能开发工作流
1. Create feature branch
1. Create feature branch
git checkout main
git pull origin main
git checkout -b feature/user-profile
git checkout main
git pull origin main
git checkout -b feature/user-profile
2. Make changes
2. Make changes
... edit files ...
... edit files ...
3. Commit changes
3. Commit changes
git add src/profile/
git commit -m "feat(profile): add user profile page
- Create profile component
- Add profile API endpoints
- Add profile tests"
git add src/profile/
git commit -m "feat(profile): add user profile page
- Create profile component
- Add profile API endpoints
- Add profile tests"
4. Keep up to date with main
4. Keep up to date with main
git fetch origin
git rebase origin/main
git fetch origin
git rebase origin/main
5. Push to remote
5. Push to remote
git push origin feature/user-profile
git push origin feature/user-profile
6. Create Pull Request on GitHub/GitLab
6. Create Pull Request on GitHub/GitLab
... after review and approval ...
... after review and approval ...
7. Merge and cleanup
7. Merge and cleanup
git checkout main
git pull origin main
git branch -d feature/user-profile
git checkout main
git pull origin main
git branch -d feature/user-profile
Example 2: Hotfix workflow
示例2:紧急修复工作流
1. Create hotfix branch from production
1. Create hotfix branch from production
git checkout main
git pull origin main
git checkout -b hotfix/critical-bug
git checkout main
git pull origin main
git checkout -b hotfix/critical-bug
2. Fix the bug
2. Fix the bug
... make fixes ...
... make fixes ...
git add .
git commit -m "hotfix: fix critical login bug
Fixes authentication bypass vulnerability
Fixes #999"
git add .
git commit -m "hotfix: fix critical login bug
Fixes authentication bypass vulnerability
Fixes #999"
4. Push and merge immediately
4. Push and merge immediately
git push origin hotfix/critical-bug
git push origin hotfix/critical-bug
git checkout main
git pull origin main
git branch -d hotfix/critical-bug
git checkout main
git pull origin main
git branch -d hotfix/critical-bug
Example 3: Collaborative workflow
示例3:协作工作流
1. Update main branch
1. Update main branch
git checkout main
git pull origin main
git checkout main
git pull origin main
2. Create feature branch
2. Create feature branch
git checkout -b feature/new-feature
git checkout -b feature/new-feature
3. Regular updates from main
3. Regular updates from main
git fetch origin
git rebase origin/main
git fetch origin
git rebase origin/main
4. Push your work
4. Push your work
git push origin feature/new-feature
git push origin feature/new-feature
5. If teammate made changes to your branch
5. If teammate made changes to your branch
git pull origin feature/new-feature --rebase
git pull origin feature/new-feature --rebase
6. Resolve any conflicts
6. Resolve any conflicts
... resolve conflicts ...
... resolve conflicts ...
git add .
git rebase --continue
git add .
git rebase --continue
7. Force push after rebase
7. Force push after rebase
git push origin feature/new-feature --force-with-lease
git push origin feature/new-feature --force-with-lease
- Commit often: Small, focused commits
- Meaningful messages: Explain what and why
- Pull before push: Stay updated
- Review before commit: Check what you're committing
- Use branches: Never commit directly to main
- Keep history clean: Rebase feature branches
- Test before push: Run tests locally
- Write descriptive branch names: Easy to understand
- Delete merged branches: Keep repository clean
- Use .gitignore: Don't commit generated files
- 频繁提交: 小而专注的提交
- 有意义的信息: 说明变更内容及原因
- 推送前拉取: 保持代码更新
- 提交前检查: 确认提交内容
- 使用分支: 绝不直接提交到主分支
- 保持历史整洁: 对功能分支使用变基
- 推送前测试: 本地运行测试
- 分支名称描述性强: 便于理解
- 删除已合并分支: 保持仓库整洁
- 使用.gitignore: 不提交生成文件
Undo last commit (keep changes)
撤销最后一次提交(保留变更)
bash
git reset --soft HEAD~1
bash
git reset --soft HEAD~1
Undo last commit (discard changes)
撤销最后一次提交(丢弃变更)
bash
git reset --hard HEAD~1
bash
git reset --hard HEAD~1
Amend last commit
修改最后一次提交
Change commit message
Change commit message
git commit --amend -m "New message"
git commit --amend -m "New message"
Add files to last commit
Add files to last commit
git add forgotten-file.txt
git commit --amend --no-edit
git add forgotten-file.txt
git commit --amend --no-edit
One line per commit
One line per commit
git log --oneline --graph --all
git log --oneline --graph --all
Last 5 commits
Last 5 commits
Commits by author
Commits by author
Commits in date range
Commits in date range
git log --since="2 weeks ago"
git log --since="2 weeks ago"
Search commit messages
Search commit messages
Search code changes
Search code changes
git log -S "function_name"
git log -S "function_name"
Show file history
Show file history
git log --follow -- path/to/file
git log --follow -- path/to/file
Accidentally committed to wrong branch
意外提交到错误分支
1. Create correct branch from current state
1. Create correct branch from current state
git branch feature/correct-branch
git branch feature/correct-branch
2. Reset current branch
2. Reset current branch
3. Switch to correct branch
3. Switch to correct branch
git checkout feature/correct-branch
git checkout feature/correct-branch
Need to undo a merge
需要撤销合并
If not pushed yet
If not pushed yet
If already pushed (creates revert commit)
If already pushed (creates revert commit)
git revert -m 1 <merge-commit-hash>
git revert -m 1 <merge-commit-hash>
Recover deleted branch
恢复已删除分支
Find lost commit
Find lost commit
Create branch from lost commit
Create branch from lost commit
git checkout -b recovered-branch <commit-hash>
git checkout -b recovered-branch <commit-hash>
Sync fork with upstream
同步复刻仓库与上游仓库
Add upstream remote
Add upstream remote
Fetch upstream
Fetch upstream
Merge upstream main
Merge upstream main
git checkout main
git merge upstream/main
git checkout main
git merge upstream/main
Push to your fork
Push to your fork
bash
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
bash
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
bash
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status
git config --global alias.unstage 'reset HEAD --'
git config --global alias.last 'log -1 HEAD'
git config --global alias.lg 'log --oneline --graph --all'
bash
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status
git config --global alias.unstage 'reset HEAD --'
git config --global alias.last 'log -1 HEAD'
git config --global alias.lg 'log --oneline --graph --all'
bash
git config --global core.editor "code --wait" # VS Code
git config --global core.editor "vim" # Vim
bash
git config --global core.editor "code --wait" # VS Code
git config --global core.editor "vim" # Vim