1424 字
7 分钟
git 教程
Git
安装与配置
# Linux 安装sudo apt install -y vim git
# 全局配置用户信息git config --global user.name "aLinChe"git config --global user.email "1129332011@qq.com"git config --global core.editor vimgit config --global color.ui true创建仓库与基础操作
git init [project_name]/// orgit clone https://github.com/DragonOS-Community/DragonOS
git statusgit add .git commit -m "feat(add-func): feat template-function-add to ..."
git fetchgit pull --allgit pull --rebase
git pushgit push -f分支操作
# 创建新分支并切换到该分支git checkout -b [branch-name]# 切换到对应分支git checkout [branch-name]
git branch -vvgit branch -a
# 删除本地分支git branch -d [branch-name] # 安全删除(已合并)git branch -D [branch-name] # 强制删除(未合并)合并与变基策略
git checkout mastergit merge feat/add_branch # 合并指定分支(feat/add_branch)到当前分支(master)git push # 推送合并结果git checkout feat/add_branch # 切换回原开发分支/// orgit checkout feat/add_branchgit rebase master # 将当前分支变基到mastergit branch -f master feat/add_branch # 移动master指针 orgit checkout master # 切换到mastergit push # 推送更新git checkout feat/add_branch # 切换回原开发分支提交历史修改
# 撤销与重置git reset HEAD~n # 撤销最近 n 次提交git reset --hard HEAD~n # 丢弃最近 n 次提交git reset [hashed]git reset --keep [hashed]
git revert [hashed] # 创建新提交来撤销更改
git push origin [branch-name]git branch -d [branch-name]git branch -D [branch-name]git push origin -d [branch-name]
git rebase -i HEAD~nsquash# pick - 保留提交# reword - 修改提交信息# edit - 修改提交内容# squash - 合并到前一个提交# drop - 丢弃提交储藏与拣选操作
# 临时储藏更改git stashgit stash save "描述信息"git stash listgit stash popgit stash apply stash@{n}git stash drop stash@{n}# 选择性应用提交git cherry-pick [commit-hash]
git cherry-pick [start-hash]^..[end-hash]
git cherry-pick [hash1] [hash2] [hash3]工作树管理 (git worktree)
git worktree 允许你在同一个仓库中同时检出多个分支到不同目录,所有工作区共享同一个 .git 目录(对象数据库),节省空间。
与 git stash 对比:
git stash:适合短时间的简单环境切换git worktree:适合长时间并行任务、对比代码、或在不同分支运行耗时测试/编(特别是如今 agent 的 ai-coding 场景)
# 创建新的工作树(基于已有分支)git worktree add ../project-hotfix hotfix# 创建新的工作树(基于远程分支)git worktree add ../new-feature origin/feature-branch
# 查看所有工作树git worktree list
# 移除工作树(建议通过命令删除,而不是手动删文件夹)git worktree remove ../project-hotfixgit worktree remove -f ../project-hotfix # 有未提交改动时强制删除
# 清理无效引用(手动删除文件夹后留下的残余记录)git worktree prune
- 不能在两个工作树中检出同一个分支,Git 会报错(防止 HEAD 指针混乱)
- 建议将 worktree 创建在主项目目录外(如
../),避免全局搜索命中两份代码
远程仓库管理
git remote -vgit remote add [shortname] [url]git remote set-url --push upstream no_push # 删掉 upstream_url 防止意外 push -fgit branch -u [remote]/[branch] [当前分支]git branch --set-upstream-to=upstream/master origin/mastergit branch -vv -a
git remote show origingit push -u origin feat/add # 首次推送并建立关联 ## 等效于 git branch -u origin/feat/addgit branch --unset-upstream # 取消错误的追踪
# 删除远程分支git push origin -d [branch-name]
git fetch upstreamgit checkout mastergit rebase upstream/master
git archive子模块操作
git submodule add https://github.com/user/submodule.git # 添加子模块
git clone --recurse-submodules https://github.com/user/repo.git # 克隆包含子模块的仓库
git submodule update --init --recursive # 更新子模块修改历史二进制文件以减小clone大小
pip install git-filter-repo # ~/.local/bin/git-filter-repogit filter-repo --file-info-callback ' if filename == b"vmlinuz": with open("bin/vmlinuz/vmlinuz", "rb") as f: new_content = f.read() new_blob_id = value.insert_file_with_contents(new_content) return (filename, mode, new_blob_id) else: return (filename, mode, blob_id) '最佳实践总结
- 提交规范:使用语义化提交信息(feat:, fix:, docs:, 等)
- 分支策略:
- main/master分支用于生产环境
- develop分支作为集成分支
- 功能分支(feat/*)用于功能开发
- 定期同步:频繁执行fetch和pull —rebase避免冲突
- 保持历史整洁:本地分支使用(rebase)变基,公共分支使用(merge)合并
- 原子化 commit 提交:适当使用 squash
- PR 前必做 rebase 整理
Git 实战任务书
Task 1:原子化提交练习
情景:你正在开发用户注册功能,已完成三个部分:
- 创建用户模型(models/user.py)
- 实现注册API(api/auth.py)
- 添加注册页面(UI/register.html)
要求:
- 为每个部分创建独立的提交
- 提交信息遵循语义化规范(feat/fix/docs等)
- 确保每个提交都是可独立构建的
Task 2:交互式变基合并
情景:在Task 1的后续开发中,你为注册功能依次创建了5个提交:
- feat(user): 基础模型
- fix(user): 修复密码字段
- feat(auth): API框架
- fix(user): 修复密码字段格式
- feat(ui): 注册页面UI
- fix(auth): 解决验证问题
要求:
- 将5个提交合并为3个有意义的提交:
- 用户模型相关(1+2+4)
- API相关(3+5)
- UI相关(5)
- 重写提交信息为专业格式
Task 3:热修复集成
情景:生产环境发现紧急bug(急急急急急):
- main分支版本:v1.2.0
- 当前开发分支:feat/user-profile
- 需要同时修复:
- 修复用户模型结构(models/user.py)
- 添加错误提示信息(UI/errors.py)
要求:
- 保存你现在开发到一半的文件(
git stash或git worktree) - 为热修复创建独立分支
- 提交修复到main分支
- 将修复同步到原来的开发分支
💡 提示:尝试分别用
git stash和git worktree add两种方式完成,体会各自的适用场景
Task 4:团队协作
要求:
- 学会使用
合适的工具(比如 VSCode 图形化界面、相关的Github插件):解决冲突,view PR,comment等等