基本概念

工作区

电脑代码所在的文件夹被称为工作区;

本地版本库

工作区中有一个.git目录,是git的版本库;

暂存库

本地版本库存储了一个名为stage的暂存去,还有git默认创建的master,以及指向master的一个指针HEAD;

远程版本库

一般指git服务器上的仓库。

以上功能关联关系

常见操作

  1. 拉取代码

git clone [https链接]

  1. 配置开发者账户密码(在git项目目录下操作)

用于每次提交代码时带的提交人信息。

git config user.name ZD

git config user.email zhangdou@88.com

  1. 编辑分支(本地)

a. 创建本地分支

git branch dev2

b. 修改本地分支

git branch -m dev2 dev3

c. 查看本地所有分支

git branch

d. 切换至本地分支

git checkout dev3

e. 删除本地分支

git branch -d dev3

  1. 查看文件变动(未提交的文件)

git status

  1. 添加文件到暂存区

git add readme.md

  1. 提交变动到版本库(提交)

git commit -m ‘git测试提交’ -m ‘第二行提交原因’

git commit -am ‘提交原因’ //将修改或删除进行提交,新增不提交

git commit —amend -m ‘修改提交原因’ //修改最后一次提交原因

  1. 推送分支到远程服务器(推送)

git push origin master

origin 指代的是当前的git服务器地址,这⾏命令的意思是把本地 master 分⽀推送到服务器

  1. 将服务器代码拉到本地

git pull origin dev

  1. 查看git提交记录

git log

  1. 给提交打标签

a. 标记某次提交记录,标记版本号

1. 确保代码已提交

git add .

git commit -m “Prepare release v1.0”

2. 创建附注标签

git tag -a v1.0 -m “Version 1.0 released”

3. 推送标签到远程

git push origin v1.0

b. 根据标签回退代码

1. 查看标签找到目标版本

git tag -l

2. 检出标签对应提交

git checkout v1.0

  1. 移动或重命名文件、目录

git mv a.md b.md -f

将 a.md 重命名为 b.md ,同时添加变动到暂存区,加 -f 参数可以强制重命名

  1. 从工作区和暂存区移除文件

git rm b.md

  1. 将其他分支合并到当前分支

git merge

  1. git栈

在 Git 的栈中保存当前修改或删除的⼯作进度,当你在⼀个分⽀⾥做某项功能开发时,接到通知把昨天已经测试完没问题 的代码发布到线上,但这时你已经在这个分⽀⾥加⼊了其它未提交的代码,这个时候就可以把这些未提交的代码存到栈⾥。

git stash //将未提交的文件保存到git栈中

git stash -m “描述” //保存时附加说明(推荐)

git stash list //查看栈中保存的列表

git stash show # 查看最新储藏的差异摘要

git stash show -p # 查看最新储藏的完整差异

git stash apply # 恢复最新储藏的修改(保留储藏记录)

git stash pop # 恢复最新储藏的修改并删除储藏记录

git stash apply stash@{n} # 恢复指定储藏(如 stash@{1})

git stash drop stash@{n} # 删除指定储藏

git stash clear # 删除所有储藏

使用场景

1. 本地修改不影响主分支(提交及撤销提交保留修改)

  1. 切换到本地dev分支(版本更新新增逻辑);
  2. 在dev分支进行代码修改;
  3. 提交dev修改代码不推送
  4. 签出代码至master分支(临时修改bug操作或排查逻辑);
  5. 签出至dev分支并拉取代码保持与远程仓库一致;
  6. 从提交记录撤销最后一次提交操作。
git checkout dev # 切换到 dev 分支(若不存在会报错)
 
git add . # 暂存所有修改
git commit -m "dev 分支的修改描述" # 提交到 dev 分支
 
git log --oneline -n 3 # 查看dev分支最近三条提交记录

回退操作

# 回退到上一个提交
git reset --soft HEAD~1
# 或指定提交哈希(更安全,尤其当提交较多时)
git reset --soft e4f5g6h
  • HEAD~1 表示回退到上一个提交(即父提交),HEAD~2 表示回退到上上个提交,以此类推。
  • 执行后,提交记录会消失(本地分支 dev 的提交历史回到 e4f5g6h),但你的代码修改仍保留在工作区,可直接编辑后重新提交。

拓展: 撤销最近一次提交,并彻底丢弃修改

git reset --hard HEAD~1 
# 或指定提交哈希 
git reset --hard e4f5g6h
  • 执行后,dev 分支的提交历史会直接回退到目标提交,且工作区的所有修改(包括未暂存和已暂存的)都会被彻底删除。
需求命令示例效果
撤销最近一次提交,保留修改git reset --soft HEAD~1提交记录回退,工作区/暂存区修改保留(可重新提交)
撤销最近一次提交,彻底丢弃修改git reset --hard HEAD~1提交记录和工作区修改全部删除(不可逆!慎用)
撤销历史提交(保留历史记录)git revert <目标提交哈希>新增一个反向提交,抵消原提交的影响(适合公共分支)

2. 本地修改不影响主分支(暂存功能)

暂存是将本地已修改未提交的代码按需求暂时存储起来,存储后当前工作区中显示的是未修改前的代码,暂存恢复后又恢复成已修改的代码。

# 暂存当前所有修改(工作区和暂存区)
git stash save "临时保存:调试中的功能"  # 可选描述
 
# 查看所有暂存的记录
git stash list   # 输出类似:stash@{0}: On dev: 临时保存:调试中的功能
 
# 恢复最近一次暂存的修改(保留暂存区状态)
git stash apply stash@{0}
 
# 恢复并删除暂存记录(常用)
git stash pop stash@{0}
 
# 彻底删除暂存记录
git stash drop stash@{0}
 
# idea中的操作方式
git -> stash Changes/隐藏变更 

场景 1:只提交部分文件

  • 修改了 src/app.js(完成新功能)和 test/test.js(测试未完成)。
  • 执行 git add src/app.js 将新功能暂存。
  • 执行 git commit -m "完成新功能",仅提交 src/app.js 的修改。
  • test/test.js 的未完成修改保留在工作区,后续继续完善后暂存提交。

场景 2:拆分一个大提交为多个小提交

  • 你在 src/utils.js 中同时修复了一个 bug 和优化了代码结构。
  • 先 git add -p src/utils.js,选择只暂存 bug 修复的部分。
  • 执行 git commit -m "修复 utils.js 中的空指针异常"
  • 再次 git add -p src/utils.js,选择暂存代码优化的部分。
  • 执行 git commit -m "优化 utils.js 的循环逻辑"

场景 3:临时保存未完成的修改

  • 正在开发新功能时,需要紧急修复线上 bug(切换到 master 分支)。
  • 执行 git stash 暂存当前未完成的修改。
  • 切换到 master 分支,创建并提交 bug 修复。
  • 切回 dev 分支,执行 git stash pop 恢复之前的修改,继续开发。