一、git是什么Git 是目前最流行的分布式版本控制系统用来记录文件的变化、协调多人协作最初是为了管理 Linux 内核开发而创建的。可以把它理解成一个强大的“存档时光机”系统存档项目每次有意义的变化比如完成一个新功能都可以存为一个“快照”。时光机任何时候都可以回退到过去某个版本或查看某个文件的修改历史。多人协作在不干扰别人的情况下并行开发最后再优雅地合并成果。为了理解它需要知道这几个核心概念仓库一个项目文件夹所有的历史记录都保存在其中的一个隐藏文件夹.git里。工作区、暂存区、仓库Git 的工作分为三块区域。你在工作区改文件把想保存的改动加入暂存区最后确认提交保存到仓库成为永久历史。这让你能精细控制每次提交的内容。提交一次提交就是项目的一个快照。Git 鼓励“小步快跑”每次完成一个小功能就提交一次。分支这是 Git 的精髓。你可以在自己的分支上大胆试验完全不影响主分支。完成后再通过“合并”把成果合入。分支的创建和切换速度极快。Git是一个免费并且开源的分布式版本控制系统能够高效的处理从小型到大型项目的版本管理以及提供有效的团队管理工具。二、git的工作原理工作区你电脑里能看到的项目文件夹改代码在这里。暂存区一个“购物车”选择哪些修改要放到下一次提交里。本地仓库存放所有历史版本的地方就在项目根目录隐藏的.git文件夹里。远程仓库GitHub/GitLab 上的版本用来协作和备份。文件在 Git 眼里只有两种状态未跟踪新文件Git 还不认识。已跟踪Git 已经在管的文件又分为未修改、已修改、已暂存三种。三、git的分支示意图主要流程新建一个项目后自动新建了mian/master分支这个时候我们新建一个develop分支用来作为主开发的分支然后不同小组新建各自的feature分支来开发各自的功能开发完后向develop主开发分支提交合并请求develop分支对其进行验证找不到bug后新建一个release分支作为测试服在进行长时间验证发现错误就打回develop进行修复发现很稳定后就向主项目main/master合并并生成版本号。main/master 分支是项目的核心分支只接受hotfixes热修复紧急修复 和release(预发布版本)的分支合并 通常具有版本号可以称为正式版release 分支是develop分支拿来验证的分支就是所谓的测试版develop 分支是开发分支也是长期存在的核心分支主要功能是收集各种feature分支对他们进行测试和验证feature 分支是各种新功能的开发分支可以同时开很多条分支同时开发减少时间成本版本号的说明1.主版本主要功能变化或者重大更新2.次版本添加一些新功能改进旧功能3.小版本修复一些bug打一些补丁四、配置你的身份在使用 Git 之前必须先告诉它“你是谁”。这套配置在这台电脑上做一次就行设置名字git config --global user.name 你的名字设置邮箱git config --global user.email 你的邮箱example.com检查是否设置成功git config --global --list--global 表示对这台电脑上所有仓库都生效。如果只想在当前项目单独设置把 --global 去掉就行。输出五、本地使用git先创建一个项目文件夹叫my-project1、初始化仓库告诉 Git 开始管理这个文件夹cd my-project git init这会创建一个.git隐藏文件夹你的所有版本历史都在里面。输出2、查看状态git status它会告诉你有什么新文件、改了哪些东西、下一步可以做什么输出3、开始第一次提交第一步添加到暂存区# 添加指定文件 git add index.html # 或一次添加所有修改过和新建的文件常用 git add .输出第二步提交到本地仓库git commit -m 初始化项目完成首页骨架第三步查看提交历史git log输出到此为止你已经完成了从零到第一次提交的全部过程。回过头看其实就是六个命令git init→git add→git commit中间夹着git status和git log看状态。六、推送到GitHub准备工作在 GitHub 上创建一个空仓库打开 https://github.com登录你的账号。点击右上角的“”→“New repository”。Repository name 填my-first-project。什么都不要勾选特别是“Initialize this repository with a README”一定不要打勾。点击绿色的“Create repository”按钮。你会看到一个页面上面有三条横杠。复制第一个框里那两条命令大致长这样git remote add origin https://github.com/你的用户名/my-first-project.git git branch -M main把它原样复制到你的终端里回车执行。接着执行推送命令git push -u origin main以后再修改代码想同步到 GitHub走这个极简流程就行git add . git commit -m 改了点什么 git push七、多人协作的核心循环1、假设现在你的代码已经被修改了也就是别人在GitHub上先推了代码2、现在你本地是旧版本如果想继续工作第一件事就是先拉取git pull origin main你会看到类似 Fast-forward 这样的提示说明拉取成功此时再打开电脑查看代码就可以看见被修改了这个动作是每天开工前的第一件事能避免后面大量的冲突。3、假设你在本地改了代码别人在网页上改了同时提交时选了“Commit directly to the main branch”这时候如果直接推git push origin main会出错误不能推因为别人在你之后更新了先去看看他改了啥4、解决冲突根据提示先拉取git pull origin main拉取的时候Git 会自动尝试合并。如果运气好改的是不同行就自动合并成功。如果改了同一行所以它会直接报冲突4.1、先打开本地文件文件里面4.2、手动修改决定最终留什么4.3、告知 Git冲突已解决保存文件后像平时一样提交git add xxx.xxx git commit -m 解决了和同事的文案冲突4.4、最后再次推送git push origin main八、分支管理分支让你在不影响主线的前提下去尝试新功能。场景你想在网页里加一个标题但不确定好不好。1. 创建一个新分支并切换过去git switch -c add-title2. 在这个分支上修改文件3. 提交这次修改git add index.html git commit -m 添加了标题标签4. 切回主分支看看效果git switch main5. 合并分支功能做完了决定合入主线git merge add-title这个命令会把add-title分支的成果合并到你当前所在的main 分支。再打开 index.html标题又出现了。6. 清理不需要的分支git branch -d add-title任务完成分支可以删掉了。九、后悔药场景命令改乱了工作区想回到上次提交的状态git restore 文件名把文件加到了暂存区想撤回git restore --staged 文件名提交信息写错了想改git commit --amend刚提交完想把漏掉的文件补进去git add 漏掉的文件git commit --amend --no-edit想看看某个文件的历史git log -p 文件名想回到过去看看某个版本git switch 提交号想彻底取消最近一次提交回到之前git reset --hard HEAD~1工作做一半要切分支但又不想提交git stash/git stash pop