问题与目标
直接复制“最终版2”无法说明改了什么,也难以安全合并多人修改。Git 把每次有意义的变更保存为提交,使历史可追踪、分支可并行、错误可恢复。
完成标准:能初始化仓库、提交修改、创建和合并分支、处理简单冲突,并根据修改是否提交选择安全撤销方式。
核心概念
工作区是正在编辑的文件,暂存区是下一次提交的候选内容,提交是仓库历史中的快照。git add 不是上传,而是把当前版本放入暂存区;git commit 才生成提交。
分支是指向提交的可移动引用。合并冲突不是 Git 损坏,而是同一区域出现无法自动判断的不同修改,需要人决定最终内容。
远程仓库保存共享引用。clone 获取仓库和默认远程,fetch 只更新远程跟踪引用,pull 通常相当于获取后再整合,push 发布本地提交。同步前先看状态和分支,避免在不明确的工作区中直接整合。
可运行实现
mkdir -p ~/git-demo
cd ~/git-demo
git init
git config user.name "Learner"
git config user.email "learner@example.com"
printf '.venv/\n.env\n__pycache__/\n*.log\n' > .gitignore
printf 'def status():\n return "ok"\n' > app.py
git add .gitignore app.py
git commit -m "feat: add health status"
git switch -c feature/message
printf '\ndef message():\n return "service ready"\n' >> app.py
git add app.py
git commit -m "feat: add service message"
git switch main 2>/dev/null || git switch master
git merge feature/message
git log --oneline --graph --decorate --all
输入是两次独立的源码修改,输出是两条可追踪提交和合并后的提交图。验收时执行 python app.py 或项目测试,确认合并后的内容不仅存在,而且仍能工作。
连接远程仓库的基本流程:
git remote add origin git@example.com:team/engineering-demo.git
git remote -v
git fetch origin
git push -u origin feature/message
远程地址只是示例。认证应使用 SSH 密钥或凭据管理器,不能把访问令牌写入远程 URL、脚本或仓库文件。
查看修改应形成习惯:
git status
git diff
git diff --staged
发生冲突时,打开带有 <<<<<<<、=======、>>>>>>> 的文件,保留正确结果并删除标记,然后执行 git add 冲突文件 和 git commit。
处理冲突前先用 git status 查看冲突文件,用 git diff --ours 和 git diff --theirs 辅助理解两侧内容。解决冲突的目标不是简单选择某一侧,而是产出能够通过测试的最终版本。
安全撤销要区分状态:
git restore app.py # 丢弃尚未暂存的指定文件修改
git restore --staged app.py # 取消暂存,保留工作区修改
git revert <commit-id> # 新建一个反向提交,适合已共享历史
前两条可能丢失未提交内容,执行前先看 git diff。已推送的公共历史优先 revert,不要随意改写历史。
常见问题与排查
- 提交了
.env:仅加入.gitignore不会移除已跟踪文件,应撤出跟踪并立即轮换已泄露密钥。 .gitignore对已跟踪文件无效:可使用git rm --cached 文件停止跟踪,但先确认工作区文件会被保留并检查暂存差异。pull产生意外合并:先git fetch,查看git log --graph --all后再决定 merge 或 rebase;团队应统一历史策略。- 分支名不是
main:用git branch --show-current确认,不要假设默认名。 nothing to commit:检查文件是否被忽略,以及修改是否已在其他提交中。- 合并前工作区不干净:先提交有意义的修改,或确认后用 stash 临时保存。
- 不确定某行来源:使用
git log -- 文件和git blame 文件追踪上下文。
小结
Git 的基本闭环是:小步修改 → 检查差异 → 暂存 → 提交 → 合并。提交信息应说明意图,密钥永远不进入仓库,撤销前先判断改动处在哪个层次。
License: CC BY-NC 4.0
Updated 3 hours ago
Was this article helpful? Give it a like.
0 comments


