## Lab1

# 1.构建
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DCOMPILER_PARSE_ONLY=ON
cmake --build build -j "$(nproc)"

# 2.单例查看
./build/bin/compiler --emit-parse-tree test/test_case/functional/simple_add.sy

# 3.批量检查
find test/test_case -name '*.sy' | sort | while read f; do ./build/bin/compiler --emit-parse-tree "$f" >/dev/null || echo "FAIL $f"; done


核心原则：不要在“落后于远端 master”的本地 master 上直接开发和提交。

你以后按这套流程，基本就不会分岔。

**日常标准流程**

1. 每次开始前先同步主干  
```bash
git switch master
git fetch origin
git pull --ff-only origin master
```

2. 从最新 master 拉功能分支开发  
```bash
git switch -c feature/xxx
```

3. 开发中频繁提交到功能分支  
```bash
git add -A
git commit -m "feat: xxx"
```

4. 推送功能分支（不要直接推 master）  
```bash
git push -u origin feature/xxx
```

5. 合并前，先把你的分支“重放”到最新 master 上  
```bash
git fetch origin
git rebase origin/master
```
有冲突就解决后：
```bash
git add -A
git rebase --continue
```

6. 再合并回 master（本地或平台 PR 都可）  
本地合并推荐：
```bash
git switch master
git pull --ff-only origin master
git merge --ff-only feature/xxx
git push origin master
```
`--ff-only` 的好处是：只允许线性历史，能最大限度避免分叉和脏 merge。

---

**你这次分岔的根因**
你的本地 master 没先追上远端 master（远端有新提交），然后直接 merge/push，导致出现两个方向的提交历史。

---

**三条硬规则（记住就行）**
1. 不在落后状态的 master 上开发。  
2. 合并前一定 `fetch + rebase origin/master`。  
3. 推 master 前先 `pull --ff-only`，失败就先处理，不要强推。

---

如果你愿意，我可以给你一份适配你仓库的 Git alias（如 `gsync`, `gstart`, `gfinish`），以后 3 条命令就走完整流程。