Git 入门实践:按一条开发流程学会最常用操作

Git 入门实践:按一条开发流程学会最常用操作 Git 入门实践按一条开发流程学会最常用操作这篇文章面向一、 还不会 Git想按步骤把最基本的开发流程走通。二、会一点 Git但平时用得不多偶尔需要查命令。1. 开始使用1.1 新项目如果是你本地新建的项目gitinit# 初始化当前目录为 Git 仓库gitconfig user.nameFirst Last# 设置当前仓库的提交用户名gitconfig user.emailaccountexample.com# 设置当前仓库的提交邮箱gitremoteaddoriginremote_url# 添加名为 origin 的远程仓库地址gitadd.# 暂存当前目录下的全部文件和修改gitcommit-mchore: initialize project# 提交第一版代码gitbranch-Mmain# 将当前分支重命名为 maingitpush-uorigin main# 首次推送 main 分支并建立跟踪关系这组命令完成的事情是初始化仓库、设置身份、关联远程、提交第一版代码并推送。1.2 老项目如果仓库已经存在直接拉取gitclone仓库URL# 克隆远程仓库的默认分支如果只想拉某个分支$gitclone-b分支名--single-branch仓库URL# 只克隆指定分支减少无关历史1.3 先检查身份和远程偶尔会遇到“提交账号不对”或者“推错仓库”的问题两个检查命令gitconfig--local--list# 查看当前仓库的本地 Git 配置gitremote-v# 查看当前仓库关联的远程地址2. 日常开发这部分是最重要的。如果你只想学会日常写代码怎么用 Git看这一节就够了。2.1 新建功能分支gitcheckout-bfeature/xxx# 创建并切换到新的功能分支不要长期直接在 main 上开发。多数情况下都应该从主分支拉出自己的功能分支。2.2 开发后先看状态gitstatus# 查看工作区和暂存区的状态这个命令用得越频繁越不容易误提交。2.3 暂存你想提交的内容gitaddfile-name# 只暂存指定文件控制本次提交范围如果你确认全部都要提交也可以gitadd.# 暂存当前目录下的全部改动建议初学阶段优先按文件 add更容易控制一次提交里到底放了什么。2.4 提交一条清晰记录gitcommit-mfeat: 完成登录页面# 提交一次清晰的功能开发记录常见前缀可以先记这几个feat新增功能。fix修复问题。docs文档修改。refactor重构。chore配置、脚本、依赖等杂项修改。提交信息不用写得很长但要让人一眼看懂你做了什么。2.5 提交后看一下日志gitlog--oneline--graph-5# 以图形化方式查看最近 5 次提交gitshowcommit_hash# 查看某次提交改了哪些内容这个命令组合适合快速确认最近几次提交是否清晰。2.6 推送到远程gitpush-uorigin feature/xxx# 首次推送当前功能分支并建立跟踪关系gitpush# 后续继续推送当前分支的新提交到这里你就已经走完了一次最基本的 Git 开发流程。2.7 取消已追踪的文件gitrm--cached文件名# Git 停止追踪一个已经被追踪的文件但保留本地文件gitrm-r--cached文件夹名# 取消追踪整个文件夹目录3. 分支合并先同步再合并写完功能后通常不会直接结束还要把代码合回主分支。3.1 先同步主分支如果团队偏向线性历史可以这样做gitfetch origin main# 拉取远程 main 的最新信息但不直接合并gitrebase origin/main# 把当前分支提交接到最新 main 后面适合个人功能分支在合并前同步主干代码。3.2 再选择 merge 或 PR 合并如果你在本地直接合并gitcheckout main# 切换回主分支gitpull origin main# 拉取远程 main 的最新代码到本地gitmerge feature/xxx# 把功能分支合并进 maingitpush origin main# 将合并后的 main 推送到远程更常见的团队做法是先把功能分支推到远程。在 GitHub 或 GitLab 上发起 PR 或 MR。通过代码评审后再合并到 main。3.3 理解 rebase 和 merge先记住一个够用的结论个人开发分支同步主分支时优先用 rebase。正式合并到主分支时按团队规范走 merge 或平台上的 PR 流程。如果你还分不太清两者区别也没必要一开始钻太深先把流程跑通更重要。3.4 用 rebase 压缩提交如果你的功能分支里有很多零散提交例如“修样式”“再改一点”“补一个小问题”那在合并前可以先压缩成更清晰的提交历史。gitlog--oneline--graph-5# 先看最近几次提交确认要整理哪些记录gitrebase-iHEAD~3# 交互式整理最近 3 次提交执行后通常会打开一个编辑界面这时可以这样理解第一条提交一般保留为pick。后面想压缩进去的提交把pick改成s或squash。保存退出后再按提示整理最终的提交信息。如果你想整理最近 5 次提交就把命令改成gitrebase-iHEAD~5# 交互式整理最近 5 次提交如果这个分支之前已经推送到远程压缩提交后通常还需要gitpush --force-with-lease# 用更安全的方式强制更新远程分支历史注意已经被多人共享的提交历史不建议随意压缩或改写。3.5 本地分支同步远程分支本地分支为react-win7无其他分支远程分支为react先把远程 react 分支拉下来但不切换$gitfetch origin# 这一步会把远程所有分支信息更新到本地包括origin/reactorigin/main 等$gitfetch origin react# 只从远程 origin 拉取 react 分支的最新提交信息$gitfetch origin react:react# 把远程 react 分支直接更新到本地 react 分支如果本地不存在会创建在本地创建 react 分支跟踪远程$gitcheckout-breact origin/react# 在本地创建 react并绑定远程 origin/react切换到本地分支的 react-win7 分支$gitcheckout react-win7在 win7 分支上 rebase 到 react$gitrebase react出现冲突解决后$gitadd.$gitrebase--continue放弃rebase$gitrebase--abort4. 出错恢复Git 最容易让人慌的不是提交而是“提错了”“改错了”“回不去了”。这一节只保留最常见的情况。4.1 add 错了想取消暂存gitrestore--stagedfile-name# 取消指定文件的暂存状态gitrestore--staged.# 取消当前目录下全部文件的暂存状态4.2 工作区改错丢弃本地修改gitrestorefile-name# 丢弃指定文件在工作区的修改gitrestore.# 丢弃当前目录下全部未暂存修改这个操作会覆盖当前改动执行前先确认内容真的不要了。4.3 用stash暂存修改gitstash push-m临时保存# 把当前未提交的修改临时存起来gitstash list# 查看当前所有 stash 记录gitstash pop stash{0}# 恢复最近一次 stash 并从列表中删除这组命令很适合处理中断开发的场景。4.4 修改最近一次提交gitadd.# 先把补充的文件加入暂存区gitcommit--amend# 修改最近一次提交的信息或内容4.5 想回退某个历史版本或撤销一些修改gitreset--softcommit_hash# 回退提交但把改动保留在暂存区gitreset--mixedcommit_hash# 回退提交但把改动保留在工作区gitreset--hardcommit_hash# 回退提交并直接覆盖当前工作区内容hard 风险最高执行前一定要确认当前改动是否还需要保留。4.6 执行错了还想找回来gitreflog# 查看本地 HEAD 变更历史便于找回误操作很多“误 reset”“误 checkout”最后都是靠这条命令找回现场。5. 常查命令清单5.1 状态和日志gitstatus# 查看工作区和暂存区的状态gitlog--oneline# 用简洁格式查看提交历史gitlog--oneline--graph--decorate--all# 用图形方式查看所有分支历史gitshowcommit_hash# 查看指定提交的详细改动gitreflog# 查看本地操作历史便于找回误操作gitrebase-iHEAD~3# 交互式压缩最近 3 次提交5.2 分支相关gitbranch-a# 查看本地和远程分支gitbranch-mold-branch-namenew-branch-name# 重命名分支gitbranch-dbranch-name# 删除本地分支gitcheckout-bbranch-name# 创建并切换到新分支gitbranch-bbranch-namecommit-id# 从某个提交中创建分支gitcheckoutbranch-name# 切换到其他分支5.3 远程仓库相关gitremote-v# 查看当前仓库的远程地址gitremoteaddremote_nameremote_url# 新增一个远程仓库连接gitremote set-urlremote_nameremote_url# 修改某个远程仓库地址gitremote removeremote_name# 删除某个远程仓库连接gitpush-uoriginbranch-name# 首次推送分支并建立跟踪关系5.4 SSH 相关ssh-keygen-ted25519-Cemailemail.com-f~/.ssh/id_ed25519_github# 生成一对新的 SSH 密钥ssh-Tgitgithub.com# 测试和 GitHub 的 SSH 连通性6. 最后建议如果你刚开始学 Git不要一上来记很多命令。先把下面这 6 个命令用熟gitstatus# 先确认当前仓库状态gitaddfile-name# 暂存本次要提交的文件gitcommit-mfeat: ...# 写下一条清晰的提交记录gitlog--oneline--graph-5# 回看最近几次提交是否清楚gitpush# 把本地提交推送到远程gitpull# 拉取远程最新代码并合并到当前分支先会“提交代码”再会“合并代码”最后再去理解 rebase、reset、reflog 这些偏进阶但很有用的命令。这样学习成本最低也最贴近真实开发。