Git:完整实践与解答
需能区分工作区、暂存区和提交。先按当前状态选择合并冲突处理、推送拒绝排查或本地提交练习;练习使用支持 --initial-branch 的 Git 与 POSIX shell,在独立目录创建两次提交,不连接远端。 示例未在本轮执行;本页完整源码与README列出输入、阅读顺序和预期。
Git 完整配置
完整配置给出忽略规则、换行约定和仅本地的练习流程。示例未执行;在读者另行允许的临时仓库使用,不连接远端。提交前用暂存差异确认只有预定文件进入快照。
Git 撤销练习
题目:A已共享,B只在本地,文件又有未暂存修改,怎样撤销A且保留其余工作?
参考答案
先保存未暂存修改,核对依赖,再对 A 生成 revert 提交。关键是新增反向提交而非把共享分支重置到 A 之前;B 若依赖 A 仍需修正。
Git 练习清理
恢复练习时先保存需要的补丁和未跟踪文件,再删除读者独立建立的临时仓库。reflog记录本地引用移动但不保存从未提交的文件内容;不能承诺恢复hard或clean丢掉的所有数据。
完整源码、配置与输入
下列文件与仓库同源,包含完整实现和输入;不是运行证明。部分练习只需人工阅读配置,不强制构造模拟器。
.gitignore
.env
*.log
out/.gitattributes
* text=auto
*.md text eol=lf
*.py text eol=lfstory.md
# Release note
Initial local-only teaching repository.walkthrough.sh
#!/usr/bin/env sh
# Reader-only POSIX shell walkthrough. NOT EXECUTED in this course.
# Preconditions: Git installed; cwd is a new disposable directory containing
# .gitignore, .gitattributes and story.md copied from this example. No remote.
set -eu
test ! -e .git
git init --initial-branch=main
git config --local user.name "Course Reader"
git config --local user.email "reader@example.invalid"
git add -- .gitignore .gitattributes story.md
git diff --cached
git commit -m "docs: record initial local story"
git switch -c lesson-note
printf '\nA local feature note.\n' >> story.md
git diff -- story.md
git add -- story.md
git commit -m "docs: add lesson note"
git switch main
git merge --ff-only lesson-note
git log --oneline --all
# Keep repository for review. No reset, clean, push, remote or automatic removal.requirements.txt
# Git with init --initial-branch support; POSIX sh for walkthrough.sh.
# Windows: read in PowerShell; run only in a separately authorized POSIX shell.项目README与完整依赖
README提供前置、完整自跑或阅读方式、预期、失败案例与恢复清理。本轮没有执行任何示例、产品CLI、模型或外部API。
# Git:完整教学包
示例未执行。全部输入为教学虚构资料,不能用于真实账号、生产数据或外部系统。
## 前置与依赖
POSIX shell、支持--initial-branch的Git;Windows仅阅读或在另行授权的POSIX环境使用。
## 文件与输入
- `.gitignore`:本包完整文件。
- `.gitattributes`:本包完整文件。
- `story.md`:本包完整文件。
- `walkthrough.sh`:本包完整文件。
- `requirements.txt`:本包完整文件。
## 读者将来自跑或阅读
复制本包所有文件到独立目录,在该目录作为当前工作目录。以下是读者自用资料,本轮禁止执行。
```text
sh walkthrough.sh
```
## 正常预期
两次本地提交;main与lesson-note指向同一最终提交,story.md多一段文字。
## 失败案例与恢复
若目录已有.git,脚本在任何初始化前停止;后续失败须检查当前步骤,不盲目整段重跑。
## 清理及能力边界
没有远端;不推送、不强推、不清理主仓库。保留未提交文件的副本后才可人工移除独立临时目录。
## 来源
- [官方依据](https://git-scm.com/docs/git-reset)(2026-10-17资料核对;不是运行证明)依据与适用范围
- 本课官方依据,资料核对日2026-10-17。
本课完成的是列明任务的理论与静态资料,不代表产品全部能力或三平台运行通过。历史文档保留旧URL;涉及账号、版本、价格与界面位置时,以对应官方资料及实际授权环境为准。
从旧命令表整理 Git 的完整工作流
先确认身份、仓库起点和三份状态。提交身份可用 git config --local user.name / user.email 覆盖个人 global 设置,system 影响整机;身份与远端访问认证分开。SSH 只把公钥交给托管平台,私钥保留本机;旧 RSA 生成输出和个人邮箱不是共享配置模板。ssh -T 的结果只证明对应平台认证,不能代替目标仓库授权。
远端已有仓库用 git clone <url> [目录];指定分支用 -b,单分支加 --single-branch,浅历史用 --depth。--filter=blob:none 是按需取对象,不能用 .gitignore 代替。新目录用 git init、选择文件 git add、git commit,再 git remote add origin <url>;已有仓库仅补远端。git remote -v 核对地址,首次 git push -u origin <branch> 建立上游。旧 --set-upstream 写法撤下,已有分支使用 git branch --set-upstream-to=origin/<branch>。
提交前依次读 git status -sb、git diff、git diff --cached。git add <file> 或 git add -p <file> 选择提交范围;交互中 y/n 接受或跳过,s 拆块、e 编辑、q 退出,a/d 处理余块。普通 commit 提交暂存快照;commit -a 只纳入已跟踪文件的修改/删除。commit --amend 会改写上次提交,已共享时先确认协作约定。消息描述一个完整改动,不以提交频率推断质量。
Git 标签删除和分支跟踪引用有什么区别?分支查看用 branch -a/-r,branch <name> 只创建,switch -c <name> 创建并切换;切换前保存冲突修改。branch -d 只删已合并分支,-D 可能丢失未合并入口;branch -m 改名。push origin --delete <branch> 删除远端分支,branch -dr origin/<branch> 仅删本地远端跟踪引用。fetch 获取对象及引用后检查差异,再选 merge 或 rebase;pull 包含获取与整合,不应作为未审阅差异的默认前置。cherry-pick 只重放所选提交,需要检查前置依赖。
历史检索按目的选择:log --oneline/--graph/--stat 看结构;--author、--since、--until 筛范围;log -- <file>、--follow 看文件历史,-S <text> 找字符串数量变化,--grep 找提交说明。show <commit>:<path> 看历史内容,blame 定位行来源。diff A B 比较端点,diff A...B 比较共同祖先到 B,不能混称两分支所有变化。reflog 追踪本地引用移动,不能恢复从未保存的所有文件。旧 git whatchanged 和按当天引用估算工作量仅留来源快照,不作为评价指标。
版本标签用 tag <name> 或 tag -a <name> -m <说明>,show 检查,push origin <tag> 只发布指定标签;--tags/--all 会扩大发布范围,先核对。tag -d 只删本地标签,push origin :refs/tags/<tag> 删远端标签;已有发布标签不要默默改指向。switch -c <branch> <tag> 可从标签继续工作。git archive <commit> 导出指定提交的跟踪文件,不能当含未提交文件和完整历史的备份。
Git 命令表怎样区分工作区暂存区和共享撤销?恢复先区分对象:取消暂存用 restore --staged,丢弃工作区修改用 restore,二者作用不同;reset --soft 保留暂存与工作区,mixed 重置暂存,hard 覆盖工作区,有破坏性。共享历史通常用 revert 新增反向提交;stash 暂存工作,pop 可能冲突,未跟踪文件需另行保存。旧命令表的 checkout .、无条件 --force、reset --hard 不再作为日常同步配方;撤销前先独立保存需要的文件。以上是命令语义整理,本次未执行仓库操作。
继续阅读
- Git任务与配置
- Git任务与配置
- Git任务与配置