软件工程实践一:Git 使用教程(含分支与 Gitee)
文章来源说明:
软件工程实践一:Git 使用教程(含分支与 Gitee) 目标
掌握 Git 基础概念与常用命令:仓库、提交、暂存区、分支
熟悉常见工作流:创建/切换分支、合并、变基、解决冲突
了解远程协作:添加远程、推送/拉取、使用 Gitee(码云)
提示:Windows 可使用 Git Bash 或 PowerShell(需先安装 Git for Windows)。
一、快速上手 1. Windows 安装 Git
1 2 3 4 5 6 7 8 9 10 11 git --version which bashgit config --global user.name "Your Name" git config --global user.email "you@example.com" git config --global init.defaultBranch main git config --global color.ui auto git config --global core.autocrlf true git config --global core.editor "code --wait"
2. 初始化 / 克隆 1 2 3 4 5 git init git clone <repo-url>
二、核心概念速览
工作区(Working Directory) :你看到的文件
暂存区(Staging Area) :下次提交的快照
本地仓库(Local Repository) :提交历史(HEAD 指向的分支)
远程仓库(Remote) :如 origin(GitHub/Gitee 等)
三、常用命令清单 1) 查看状态与差异 1 2 3 git status git diff git diff --staged
2) 添加与提交 1 2 3 4 5 6 git add <file> git add . git commit -m "feat: add user api" git commit --amend -m "fix: correct message"
3) 历史与回溯 1 2 3 4 git log --oneline --graph --decorate --all git show <commit>
4) 撤销与恢复(Git 2.23+ 推荐新命令) 1 2 3 4 5 6 7 8 9 10 11 12 git restore <file> git restore --staged <file> git revert <commit> git reset --mixed <commit>
5) 忽略文件 创建 .gitignore:
1 2 3 4 5 6 7 # Java/IDE 示例 /target/ *.class *.log .idea/ *.iml .DS_Store
四、分支与合并(Branch & Merge) 1) 创建与切换 1 2 3 4 git switch -c feature/login git switch main
2) 更新主干与合并 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 git switch main git merge feature/login git fetch origin git switch main git pull --rebase origin main git switch feature/login git merge main --no-ff -m "merge main into feature/login" git rebase main
3) 推送与合并回主干 1 2 3 4 5 6 7 git push -u origin feature/login git switch main git merge --no-ff feature/login -m "feat(login): implement basic login" git push origin main
4) 解决冲突 1 2 3 4 5 6 git add <conflicted-files> git rebase --continue git rebase --abort
5) 常见工作流
Git Flow :main + develop + feature/release/hotfix(适合版本节奏固定)
Trunk-Based :main + 短分支 + 小步快跑 + CI(多数团队推荐)
五、远程协作(Remote) 1) 添加与管理远程 1 2 3 4 5 git remote -v git remote add origin <url> git remote set-url origin <new-url>
2) 获取与推送 1 2 3 git fetch origin git pull --rebase origin main git push origin main
3) 追踪分支(上游) 1 2 3 4 5 6 7 8 git push -u origin feature/x
六、Gitee(码云)使用 1) 创建仓库
登录 Gitee,新建仓库,获取 HTTPS 或 SSH 地址
2) 使用账号密码或个人访问令牌(推荐)
3) 绑定远程并推送(以 HTTPS 为例) 1 2 3 4 git remote add origin https://gitee.com/<your-namespace>/<repo>.git git push -u origin main
4) 从 GitHub 迁移到 Gitee(镜像)
方案 A:在 Gitee 仓库设置中使用”从 GitHub 导入仓库”
方案 B:本地设置两个远程,手动推送
1 2 3 4 5 git remote add github git@github.com:<ns>/<repo>.git git remote add gitee https://gitee.com/<ns>/<repo>.git git push gitee --all git push gitee --tags
七、进阶:变基、挑拣、暂存与标签 1) 交互式变基(整理提交历史)
2) 挑拣(把某提交拷到当前分支) 1 git cherry-pick <commit>
3) 暂存(临时搁置工作) 1 2 3 git stash push -m "wip: refactor" git stash list git stash apply
4) 标签(发布打标) 1 2 3 git tag v1.0.0 git tag -a v1.0.1 -m "hotfix" git push origin --tags
八、常见问题速查
push 被拒绝 :先 git fetch,再 git rebase origin/main 或开分支提 PR
Detached HEAD :git switch <branch> 回到分支;需要保存可新建分支 git switch -c temp
误删文件 :从最近提交恢复 git restore --source=HEAD -- <file>
大文件入库 :考虑 Git LFS;或加入 .gitignore 并清理历史
行尾换行混乱 :检查 core.autocrlf 设置;跨平台建议 true
九、实战练习:20 步从零到协作
场景:在本地新建项目 → 管理变更 → 分支开发 → 合并与解决冲突 → 连接远程并推送 → 打标签与回滚。命令可在 PowerShell 或 Git Bash 中执行。要求:提交信息使用中文,示例代码使用 Java。
1. 新建目录并初始化仓库
1 2 mkdir demo-git && cd demo-gitgit init
2. 配置用户名邮箱(仅首次或需要覆盖时)
1 2 git config user.name "学生" git config user.email "student@example.com"
3. 创建 README 并首次提交(中文提交信息)
1 2 3 echo "# Demo Git 项目" > README.mdgit add README.md git commit -m "初始化仓库并添加 README"
4. 新建 .gitignore 并提交
1 2 3 echo -e "/dist/\n*.log" > .gitignoregit add .gitignore git commit -m ".gitignore:忽略构建产物和日志"
5. 创建 Java 主类并提交(App v1)
1 2 3 4 5 6 7 8 mkdir srcecho "public class App {" > src/App.javaecho " public static void main(String[] args) {" >> src/App.javaecho " System.out.println(\"v1\");" >> src/App.javaecho " }" >> src/App.javaecho "}" >> src/App.javagit add src/App.java git commit -m "新增 Java 主类 App(v1)"
6. 创建功能分支并切换
1 git switch -c feature/login
7. 在功能分支新增登录功能类(提交 1)
1 2 3 4 5 echo "public class AuthService {" > src/AuthService.javaecho " public boolean login() { return true; }" >> src/AuthService.javaecho "}" >> src/AuthService.javagit add src/AuthService.java git commit -m "登录功能:新增 AuthService,包含 login 方法"
8. 在功能分支完善登出功能(提交 2)
1 2 3 4 5 6 echo "public class AuthService {" > src/AuthService.javaecho " public boolean login() { return true; }" >> src/AuthService.javaecho " public boolean logout() { return true; }" >> src/AuthService.javaecho "}" >> src/AuthService.javagit add src/AuthService.java git commit -m "登录功能:补充 logout 方法"
9. 切回主分支并做一次修复
1 2 3 4 5 6 7 8 9 git switch main echo "public class App {" > src/App.javaecho " public static void main(String[] args) {" >> src/App.javaecho " System.out.println(\"v1\");" >> src/App.javaecho " System.out.println(\"HOTFIX\");" >> src/App.javaecho " }" >> src/App.javaecho "}" >> src/App.javagit add src/App.java git commit -m "主分支修复:修正启动日志(HOTFIX)"
10. 将主干变更同步到功能分支(rebase,更线性)
1 2 git switch feature/login git rebase main
11. 若出现冲突则解决并继续(无冲突可跳过)
1 2 3 git add . git rebase --continue
12. 将功能分支合并回主干(无快进,保留记录)
1 2 git switch main git merge --no-ff feature/login -m "合并 feature/login:登录功能完成"
13. 查看提交历史图
1 git log --oneline --graph --decorate --all
14. 创建发布标签(v1.0.0)
1 git tag -a v1.0.0 -m "首次发布版本"
15. 添加远程并首次推送(以 Gitee 为例)
1 2 git remote add origin https://gitee.com/<your-namespace>/<repo>.git git push -u origin main
16. 推送功能分支与标签
1 2 git push -u origin feature/login git push origin --tags
17. 创建新分支新增 Banner 类,并将提交挑拣到 main
1 2 3 4 5 6 7 8 git switch -c feature/banner echo "public class Banner {" > src/Banner.javaecho " public static void show() { System.out.println(\"BANNER\"); }" >> src/Banner.javaecho "}" >> src/Banner.javagit add src/Banner.java git commit -m "新增 Banner 类:打印横幅" git switch main git cherry-pick feature/banner
18. 制造一个误提交并回退工作区/暂存区
1 2 3 4 5 6 echo "wrong" > tmp.txtgit add tmp.txt git restore --staged tmp.txt git restore tmp.txt
19. 修改最近一次提交的提交信息,并升级 App 到 v2
1 2 3 4 5 6 7 8 9 10 echo "public class App {" > src/App.javaecho " public static void main(String[] args) {" >> src/App.javaecho " System.out.println(\"v1\");" >> src/App.javaecho " System.out.println(\"v2\");" >> src/App.javaecho " }" >> src/App.javaecho "}" >> src/App.javagit add src/App.java git commit -m "升级主程序至 v2" git commit --amend -m "App 升级:输出 v1 与 v2"
20. 回滚某次已推送的功能(生成反向提交,安全)
1 2 git revert HEAD git push origin main
提示:
如遇推送被拒绝,先执行 git fetch 与 git pull --rebase origin main 同步。
在多人协作中,建议使用 Pull Request/Merge Request 进行代码评审与合并。