跳转至

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/.coveragehtmlcov/*.db.envsite/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?

记录:



自查(周测会考)

  1. git restore <file>git restore --staged <file> 分别撤销了什么?
  2. git commit --amend 什么时候不能用?
  3. git switch -c xgit switch x 差一个 -c,差在哪?
  4. 冲突解决后必须做什么才能完成合并?
  5. .env 已经推到远程了,改 .gitignore 有用吗?