Week 2 · M6b · Git 情景演练(周二)¶
用法:8 个情景题。每题先只写命令(不许先跑),写完再在一个练习仓库里实际操作一遍, 把真实输出与"和预想不一样的地方"记录下来。 练习仓库这样建(不要拿
learn-python做危险实验):mkdir $env:TEMP\git-drills; cd $env:TEMP\git-drills git init; git switch -c main "v1" > a.txt; git add a.txt; git commit -m "feat: 初始提交"全部做完后回到
learn-python,完成第 9 节(推送到 cnb.cool)。
提交信息用简版 Conventional Commits:feat 新功能、fix 修 bug、docs 文档、
refactor 重构、test 测试、chore 杂项。格式:<type>: <一句话,动词开头>。
1. 我改坏了一个文件,还没 git add,想回到上一次提交的样子¶
命令:
实际输出与发现:
2. 我已经 git add 了,但还没 commit,想把它从暂存区拿出来(保留工作区改动)¶
命令:
实际输出与发现:
3. 刚提交完就发现提交信息写错了(只错最后一条,且还没推送)¶
命令:
实际输出与发现:
4. 我想试一个不确定的想法,不想弄脏 main¶
命令(开分支、切回来、把分支删掉):
实际输出与发现:
5. 合并分支时冲突了,怎么看、怎么解、怎么收尾¶
制造冲突:两个分支各自改 a.txt 的同一行再 git merge。
命令与步骤(包括 <<<<<<< HEAD 这些标记怎么处理、解完要不要 git add):
实际输出与发现:
6. 手头改动还没做完,但要马上切分支去修 bug¶
命令(暂存、切分支、修完切回来、恢复):
实际输出与发现:
7. 我把 .env(含密钥)误提交了,想从历史里彻底删掉¶
先写出你会怎么做(提示:不要指望 git rm 就够了;这是"改写历史"级别的操作),
再写出你打算搜索什么关键词去确认做法,以及事后必须做的一件事:
要搜索的关键词:
事后必须做的一件事(提示:泄露过的密钥不再安全):
8. 我想知道"这一行是谁、什么时候、为什么改的"¶
命令(log 的三种常用形态 + 查某个文件的历史 + 逐行归属):
实际输出与发现:
9. 把 learn-python 推到 cnb.cool¶
- 检查
.gitignore至少包含:__pycache__/、.venv/、.pytest_cache/、.ruff_cache/、.coverage、htmlcov/、*.db、.env、site/、dist/ -
git status --short确认.venv/、site/、.env不在待提交列表里 - 在 cnb.cool 新建仓库 →
git remote add origin <cnb 地址> -
git push -u origin main - 可选第二远程:
git remote add github <地址>;git remote -v核对 - 回答:为什么
.venv/不进 Git,而uv.lock要进 Git?
记录:
自查(周测会考)¶
git restore <file>和git restore --staged <file>分别撤销了什么?git commit --amend什么时候不能用?git switch -c x和git switch x差一个-c,差在哪?- 冲突解决后必须做什么才能完成合并?
.env已经推到远程了,改.gitignore有用吗?