## Git 常用命令总结（适配 Gitea/GitHub）

### 🔧 **基础配置**
```bash
# 配置用户信息（全局）
git config --global user.name "你的用户名"
git config --global user.email "你的邮箱"

# 配置默认分支名称（现代Git推荐）
git config --global init.defaultBranch main

# 查看配置
git config --list

# 为不同平台配置不同身份（可选）
# 在项目目录内设置局部配置，会覆盖全局配置
git config user.name "项目专用用户名"
```

### 📦 **仓库操作**
```bash
# 初始化新仓库
git init

# 克隆仓库（通用格式）
git clone https://github.com/用户名/仓库名.git    # GitHub
git clone https://gitea.com/用户名/仓库名.git     # Gitea
git clone git@github.com:用户名/仓库名.git        # SSH方式
git clone git@gitea.com:用户名/仓库名.git         # SSH方式

# 查看远程仓库信息
git remote -v

# 添加远程仓库
git remote add origin <仓库URL>
git remote add upstream <上游仓库URL>  # 常用于fork的工作流

# 修改远程仓库URL
git remote set-url origin <新URL>
```

### 📝 **日常开发流程**
```bash
# 查看状态
git status

# 添加文件到暂存区
git add <文件名>        # 添加特定文件
git add .              # 添加所有修改
git add -A             # 添加所有修改（包括删除）

# 提交更改
git commit -m "提交说明"
git commit -am "提交说明"  # 添加并提交已跟踪文件

# 查看提交历史
git log --oneline --graph --decorate
git log -p              # 显示详细修改内容
```

### 🌿 **分支管理**
```bash
# 查看分支
git branch              # 本地分支
git branch -r           # 远程分支
git branch -a           # 所有分支

# 创建与切换分支
git branch <分支名>      # 创建分支
git checkout <分支名>    # 切换分支
git checkout -b <分支名> # 创建并切换

# 合并分支
git merge <分支名>       # 合并指定分支到当前分支

# 删除分支
git branch -d <分支名>   # 删除本地分支
git push origin --delete <分支名>  # 删除远程分支
```

### 🔄 **远程同步**
```bash
# 拉取更新
git pull origin <分支名>           # 拉取并合并
git fetch origin                 # 仅获取不合并
git fetch --prune               # 获取并清理已删除的远程分支

# 推送更改
git push origin <分支名>
git push -u origin <分支名>      # 首次推送并设置上游分支

# 强制推送（谨慎使用）
git push --force-with-lease     # 比--force更安全
```

### 🗑️ **撤销操作**
```bash
# 撤销工作区修改
git checkout -- <文件名>

# 撤销暂存区文件
git reset HEAD <文件名>

# 修改最后一次提交
git commit --amend -m "新提交信息"

# 撤销提交（保留更改）
git reset --soft HEAD~1

# 撤销提交（丢弃更改）
git reset --hard HEAD~1

# 恢复已删除的文件
git checkout <提交哈希> -- <文件名>
```

### 🏷️ **标签管理**
```bash
# 创建标签
git tag v1.0.0                 # 轻量标签
git tag -a v1.0.0 -m "版本说明" # 附注标签

# 推送标签
git push origin v1.0.0         # 推送单个标签
git push origin --tags         # 推送所有标签

# 删除标签
git tag -d v1.0.0              # 删除本地标签
git push origin :refs/tags/v1.0.0 # 删除远程标签
```

### 🧹 **清理与维护**
```bash
# 清理未跟踪文件
git clean -n     # 预览将被删除的文件
git clean -f     # 强制删除未跟踪文件
git clean -fd    # 删除未跟踪文件和目录

# 查看仓库大小
git count-objects -vH
```

### 🔗 **Gitea/GitHub 特定注意事项**

#### 1. **SSH 密钥配置（通用）**
```bash
# 生成SSH密钥
ssh-keygen -t ed25519 -C "your_email@example.com"

# 测试连接
ssh -T git@github.com
ssh -T git@gitea.example.com
```

#### 2. **仓库URL格式**
```bash
# HTTPS格式（需输入凭据）
https://github.com/用户名/仓库.git
https://gitea.example.com/用户名/仓库.git

# SSH格式（需配置密钥）
git@github.com:用户名/仓库.git
git@gitea.example.com:用户名/仓库.git
```

#### 3. **Pull Request 工作流**
```bash
# Fork 工作流示例
git clone <自己fork的仓库>
git remote add upstream <原始仓库>
git fetch upstream
git merge upstream/main
git push origin main
```

#### 4. **大文件处理**
```bash
# 使用Git LFS（如果平台支持）
git lfs install
git lfs track "*.psd"
git add .gitattributes
```

### 📊 **实用别名配置**
在 `~/.gitconfig` 中添加：
```ini
[alias]
    co = checkout
    br = branch
    ci = commit
    st = status
    lg = log --oneline --graph --decorate
    last = log -1 HEAD
    unstage = reset HEAD --
    undo = reset --soft HEAD~1
```

### ⚠️ **注意事项**
1. **强制推送**：避免在公共分支使用 `git push --force`
2. **敏感信息**：切勿提交密码、密钥等敏感数据
3. **`.gitignore`**：提前配置忽略文件
4. **commit信息**：使用清晰的提交说明
5. **定期同步**：开发前先 `git pull` 获取最新代码

### 📁 **常用 .gitignore 模板**
```gitignore
# 操作系统文件
.DS_Store
Thumbs.db

# 编辑器文件
.vscode/
.idea/
*.swp
*.swo

# 依赖目录
node_modules/
vendor/

# 环境变量
.env
.env.local
```

这些命令在 Gitea 和 GitHub 上完全通用，主要区别在于仓库 URL 格式和部分 Web 界面功能。