当前位置: 首页 > news >正文

Git 常用命令、常用错误的总结

Git 常用命令

初始化配置

配置用户信息是使用 Git 的第一步:

//1.配置全局用户名和邮箱
git config --global user.name "YourName"  # 设置全局用户名
git config --global user.email "email@example.com"  # 设置全局邮箱//2.查看配置信息
git config --list
仓库初始化
//初始化新仓库
git init//克隆远程仓库
git clone <repository-url>
// git clone https://gitee.com/sumuyu/vue3-vite-ts-project.git  # 克隆远程仓库
状态查看

//1.查看工作区状态
git status//2.查看简化状态信息
git status -s//3.查看分支情况
git branch -v
添加和提交
//1.添加文件到暂存区
git add <file>  # 添加指定文件到暂存区
git add .  # 添加所有更改到暂存区//2.提交更改到本地仓库
git commit -m "Commit message"  # 提交更改并添加提交信息//3.提交并跳过暂存
git commit -a -m "Commit message"  # 跳过暂存直接提交git commit -am "commit message"
分支管理是 Git 的核心功能
//1.创建新分支
git branch <branch-name>  # 创建新分支//2.切换分支
git checkout <branch-name>  # 切换到指定分支//3.创建并切换分支
git checkout -b <branch-name>  # 创建并切换到新分支// 4.删除分支
git branch -d <branch-name>// 5.查看远程分支
git branch -r// 6.查看本地分支
git branch -l// 7.查看所有分支
git branch -a// git checkout -b feature/login  # 创建并切换新分支(推荐前缀:feature/fix/)
// git branch -a  # 查看所有分支(含远程)
// git branch -d feature/login  # 安全删除已合并分支
// git branch -D feature/login  # 强制删除未合并分支(慎用)
远程仓库操作
//添加远程仓库
git remote add origin <repository-url>//查看远程仓库
git remote -v//推送到远程
git push origin <branch-name>//拉取远程更新
git pull origin <branch-name>
合并与衍合
//合并分支
git merge <branch-name>//变基操作
git rebase <branch-name>//解决冲突后继续变基
git rebase --continue// 完全回退到变基前状态
git rebase --abort     // 查看变基进度
git rebase --progress// 查看变基日志
git rebase --log
基变步骤

是一种重写提交历史的操作,用于将一个分支的提交移动到另一个分支的最新提交之后,使历史更线性

//1.切换到目标分支
git checkout <target-branch>//2.执行变基操作, 将当前分支变基到 master 分支
git rebase <source-branch>//3.解决冲突(如果有)
git add <冲突文件>  # 添加冲突文件
git rebase --continue  # 继续变基//4.推送更新到远程(谨慎使用)
git push origin target-branch --force  # 强制推送
// git push --force-with-lease origin HEAD:feature-search

git rebase 是维护清晰提交历史的利器,尤其适用于​​个人分支同步主分支更新​​或​​整理本地提交​​。但需严守原则:

​​✅ 适用​​:未推送的本地分支、临时特性分支。
​​❌ 禁用​​:已推送的公共分支、主分支。

暂存操作

git stash是 Git 中一个非常有用的命令,用于临时保存当前工作目录中的更改,以便切换到其他分支或进行其他操作,而不用担心丢失未提交的更改。以下是关于 git stash 的一些常用命令和使用场景:

1.保存当前工作目录的更改
git stash
// 或者更明确的命令:
git stash save "描述信息"
  • 这会将当前工作目录中的所有未提交的更改(包括已暂存和未暂存的更改)保存到一个“stash”中,并将工作目录恢复到最近一次提交的状态。
  • 如果添加了描述信息,可以在后续查看 stash 列表时更容易识别。
2.查看所有 stash 列表
git stash list
  • 这会列出所有保存的 stash,每个 stash 都有一个编号(如 stash@{0}stash@{1} 等)。
  • 如果在保存 stash 时添加了描述信息,这里也会显示出来。
3.恢复某个 stash
  • 应用某个 stash,但保留该 stash:
git stash apply stash@{编号}
// 或者默认应用最近的 stash:
git stash apply
// 这会将 stash 中的更改应用到当前工作目录,但不会从 stash 列表中删除该 stash。
  • 应用某个 stash 并删除该 stash:
git stash pop stash@{编号}
//或者默认弹出最近的 stash:
git stash pop
//这会将 stash 中的更改应用到当前工作目录,并从 stash 列表中删除该 stash。
4.删除某个 stash
  • 如果只想删除某个 stash,而不应用更改,可以使用:
git stash drop stash@{编号}//删除所有 stash:
git stash clear
5.查看某个 stash 的详细内容
git stash show stash@{编号}
//或者查看更详细的 diff:
git stash show stash@{编号} -p
6.分支切换时的 stash 使用
  • 如果你在当前分支上有未提交的更改,但需要切换到另一个分支,可以先使用 git stash 保存更改,然后切换分支:
git stash
git checkout 其他分支
//完成操作后,再切换回原来的分支,并恢复 stash:
git checkout 原分支
git stash pop
7.分支合并时的 stash 使用
  • 如果你在合并分支时遇到冲突,也可以先保存当前更改:
git stash
git merge 其他分支
//解决冲突后,再恢复 stash:
git stash pop

注意事项

  • stash 是基于当前分支的:stash 保存的是相对于当前分支的更改,因此在恢复 stash 时最好回到原来的分支。
  • stash 不影响历史记录:stash 是一种临时保存更改的方式,不会影响 Git 的提交历史记录。
  • stash 的适用场景:主要用于临时保存未完成的工作,以便切换到其他任务,或者在遇到冲突时保存当前更改。

总之,git stash 是一个非常灵活且强大的命令,可以帮助你在复杂的开发流程中更好地管理未提交的更改。

日志查看
git log  # 查看提交日志
git log --oneline  # 简洁的单行日志
git log --graph  # 以图形化方式显示提交历史
git log --stat  # 显示每个提交的文件更改统计
git log --author="YourName"  # 按作者过滤
// 查看图形化日志
git log --graph --pretty=oneline --abbrev-commit
差异比较
// 比较工作目录和暂存区的差异
git diff
// 比较暂存区和上次提交的差异
git diff --staged  
//比较最近两次提交的差异
git diff HEAD^ HEAD  
//比较两个分支的差异
git diff branch1 branch2  
撤销操作
//撤销工作区的修改
git checkout -- <file-name>//撤销暂存区的修改
git reset HEAD <file-name>
//回滚到上一次提交
git reset --hard HEAD~1  # 
// 回滚到指定提交
git reset --hard <commit-id> //创建反向提交
git revert <commit-id>
重置操作
//重置到指定提交
git reset --hard <commit-id>
//重置到指定分支
git reset --hard origin/main

Git 重置操作(git reset)是版本控制中的核心功能,用于调整提交历史、暂存区和工作区状态。根据使用场景和风险程度,可分为三种模式,以下是系统总结

模式命令影响的区域适用场景
–softgit reset --soft 仅移动 HEAD 指针撤销提交但保留修改在暂存区,用于重新提交或修改注释
–mixed(默认)git reset --mixed 移动 HEAD 和暂存区撤销提交并将修改移至工作区,需重新 git add
–hardgit reset --hard 重置 HEAD、暂存区和工作区彻底丢弃所有未提交的修改,强制回退到历史版本
  • 撤销本地提交​
git reset --soft HEAD~1    # 撤销最近一次提交,修改保留在暂存区
git commit -m "新提交信息"   # 重新提交
  • 彻底丢弃提交​​:
git reset --hard HEAD~1    # 丢弃最近一次提交,修改完全丢失
  • 撤销误添加的文件(git add 后反悔)
git reset HEAD <file>        # 将文件移出暂存区,保留工作区修改 [6](@ref)
git restore --staged <file>  # 等效操作(Git 2.23+
  • 回退到历史版本​
git log                      # 查找目标提交的哈希值(如 `abc123`)
git reset --hard abc123      # 彻底回退到该版本 [3](@ref)
  • 恢复被丢弃的提交​
    若误用 --hard 重置,可通过 reflog 恢复
git reflog                   # 查看操作历史,找到目标提交哈希
git reset --hard <commit>    # 恢复到指定提交 [7](@ref)
  • 安全撤销
    当需要撤销公共分支的提交时,优先使用 revert 生成逆向提交,保留历史完整性
git revert <commit>          # 创建新提交,撤销指定提交的更改 [4](@ref)
git push origin branch       # 无需强制推送

注意

  • 未推送且想彻底丢弃 → --hard
  • 未推送但需修改 → --soft/–mixed
  • 已推送 → ​​仅用 revert
  • git revert 的核心机制​
// 1:定位目标提交
git log --oneline  # 查看提交历史,复制需撤销的提交哈希(如 `d467890`// 步骤 2:执行撤销操作
git revert d467890  # 撤销指定提交
// ​​自动行为​​:
// 打开编辑器生成默认撤销信息(可修改)。
// 若无冲突,自动创建新提交(如 e5f4321 Revert "添加支付功能")。
// 步骤 3:解决冲突(如发生)
// 手动编辑冲突文件(标记为 <<<<<<< 和 >>>>>>>)。
// 标记解决后的文件并继续:
git add file.txt  # 添加解决后的文件
git revert --continue  # 完成撤销
// 放弃操作:
git revert --abort。
// 步骤 4:推送到远程仓库
git push origin main  # 非强制推送,安全同步远程分支

添加 --no-edit 选项可跳过编辑器,直接使用默认信息:

git revert --no-edit a1b2c3d

在这里插入图片描述

标签管理
// 列出所有标签
git tag
// 创建轻量级标签(指向提交)
git tag v1.0
// 创建附注标签(包含注释)
git tag -a v1.1 -m "Release version 1.1"
// 查看标签信息
git show v1.1
// 推送标签到远程
git push origin v1.1
// 删除本地标签
git tag -d v1.0
// 删除远程标签
git push origin :refs/tags/v1.0
别名配置
git config --global alias.<别名> '<原命令>'
// 配置全局别名
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status//​​本地配置​​(仅对当前仓库生效)
git config alias.<别名> '<原命令>'
// 配置本地别名
git config alias.co checkout
git config alias.br branch
远程分支操作
// 查看远程分支
git branch -r
// 查看所有分支
git branch -a  
// 拉取远程分支
git pull origin <branch-name>
// 推送本地分支到远程
git push origin <branch-name>// ​​查看分支跟踪关系
git branch -vv  //显示本地分支与远程分支的关联(`[origin/branch]` 表示跟踪关系)//​删除远程分支​​(⚠️ 不可逆操作!)
git push origin --delete feature-old  //删除远程分支 `feature-old`
git push origin :feature-old          //效果同上//清理本地失效的远程引用​
//远程分支已被删除,但本地仍显示 origin/deleted-branch
git remote prune origin       //清理本地无效的远程分支引用
git fetch --prune             //等效命令(更常用)// 自动化配置​​:每次 fetch 自动清理
git config --global fetch.prune true  //全局启用
忽略文件
// 创建 .gitignore 文件
touch .gitignore
// 添加忽略规则"*.log" >> .gitignore  # 忽略所有 .log 文件"node_modules/" >> .gitignore  # 忽略 node_modules 目录
在 Git 版本控制系统中,分支命名规范通常遵循团队协作和项目管理的需求。以下是一些常见的 Git 分支命名规范:
// 1.主分支(核心分支)
// 存放稳定、可发布的代码,仅接受合并(非直接提交)
main/master  # 用于生产环境
//2.开发分支
//日常开发集成分支,所有新功能分支基于此创建并合并回此分支  
develop 或 dev
//3.功能分支(新功能开发)
// 开发独立功能,从 develop 分支创建,完成后合并回 develop。feature/<功能描述> 或 feat/<功能描述>如:feature/user-login(用户登录功能)、feature/product-list(产品列表功能)
//4.修复分支(修复 bug)
//a.普通修复​​
//修复非紧急 Bug,从 develop 分支创建
bugfix/<问题描述> 或 fix/<问题描述>
如:fix/login-error(登录错误修复)
//​ b.​紧急热修复​​:
// hotfix/<问题描述> 或 fix/<问题描述>
// 修复紧急 Bug,从 main/master 分支创建
如:hotfix/login-error(登录错误修复)
// 5. 发布分支(版本发布)
// 预发布测试分支,从 develop 创建,测试后合并到 master 并打 Tag。
release/<版本号>
​​如​​:release/v1.2.0
// 5.文档分支
// 用于编写文档,从 develop 或 main 创建
docs/<文档描述>
如:docs/readme-update(更新 README 文件)
// 6.临时分支
// 用于临时实验或测试,不建议长期保留
temp/<描述>
如:temp/experiment(实验分支)
提交信息规范
1. chore: 项目初始化
git commit -m 'chore: 项目搭建'
2. feat: 增加新功能
git commit -m 'feat: xx' 
3. fix: 改bug
git commit -m 'fix: xx'
4. style: 样式修改、UI走查
git commit -m 'style: xx'
5. test: 部署测试环境
git commit -m 'test: xx'
6. docs: 文档修改
git commit -m 'docs: xx'
7. refactor: 代码重构
git commit -m 'refactor: xx'
8. perf: 性能优化
git commit -m 'perf: xx'
本地创建分支后推送到远程
//步骤 1:创建并切换到本地新分支
git checkout -b feature-login  # 创建分支 `feature-login` 并切换//步骤 2:提交本地更改
git add .                      # 添加所有修改到暂存区
git commit -m "添加登录功能"     # 提交到本地仓库// 步骤 3:推送到远程仓库并关联分支
git push -u origin feature-login  # 推送并设置远程追踪分支// ​​关键参数 -u​​:
// 自动在远程创建同名分支 feature-login
// 建立本地分支与远程分支的追踪关系,后续可直接用 git push/git pull
直接通过 Git 命令创建远程分支(无需本地分支)
// 基于远程现有分支(如 main)创建新远程分支
git push origin main:refs/heads/dev-backend  # 将远程 `main` 复制为 `dev-backend`
基于远程分支创建本地分支并推送​
//步骤1拉取远程分支到本地
git fetch origin// 步骤2基于远程分支创建本地分支
git checkout -b feature-search origin/master  # 基于 `origin/master` 创建 `feature-search`// 步骤3推送并关联
git push -u origin feature-search

在这里插入图片描述

git 常见错误
1.git提交代码报错husky > pre-commit
# 解决方法:
// 1、找到该文件目录,找到.git文件(.git是隐藏文件,mac需要command+shift+. 查看隐形文件)
// 2、找到.git下的hooks
// 3、去除pre-commit文件;
// pre-commit(客户端)钩子,它会在Git键入提交信息前运行做代码风格检查。
// 如果代码不符合相应规则,则报错。
// 解决:我们将该文件删除之后,再进行commit,发现就能成功提交了。这是提交的检查机制
2.git 上传出现“ ! [rejected] master -> master (non-fast-forward)”
# 解决方法:
// 一、设置git仓库
// 1、先删除原来仓库
// git remote rm origin
// 2、添加仓库
// git remote add origin [url]
// 注意:若要修改仓库
// git remote origin set-url [url]
// 从提示语中可以看出是,问题(Non-fast-forward)的出现原因在于:git仓库中已经有一部分代码,所以它不允许你直接把你的代码覆盖上去。于是你有2个选择方式
// (一)、强制推送,即利用强覆盖方式用你本地的代码替代git仓库内的内容,如果远程仓库是刚建的,没有代码,可以这样操作,尽量避免这种操作方法。
// git push -f
// (二)、 先把git的东西fetch到你本地然后merge后再push
// git fetch
// git merge
// **注意:**
// 1、在使用的时候,git merge,又出现了以下的问题xu:QProj xiaokai$ git mergefatal: refusing to merge unrelated histories
// 对于这个问题。使用
// git pull origin master --allow-unrelated-histories
// git merge// ,如果依然有问题// fatal: You have not concluded your merge (MERGE_HEAD exists).
// Please, commit your changes before you merge.// 这个就好处理了,是我们没有提交当前的变化// git add .// git commit -m "modify"// git merge// git pull// git push origin master
3. Git 大文件清理
# 解决方法:
// 1、 ​​查询大文件​
git verify-pack -v .git/objects/pack/pack-*.idx | sort -k 3 -g | tail -5// 2 .获取id对应的文件名
git rev-list --objects --all | grep <对象ID>
如:git rev-list --objects --all | grep  64f8fc56e91abb33502ff1fca504b786a7d0fa01
// 3.删除文件
git filter-branch --force --prune-empty --index-filter 'git rm -rf --cached --ignore-unmatch  <文件名称> ' --tag-name-filter cat -- --all如:git filter-branch --force --prune-empty --index-filter 'git rm -rf --cached --ignore-unmatch  上交所指数股(ETF)大讲堂--华创证券专场培训.zip ' --tag-name-filter cat -- --all
// --prune-empty:自动删除因移除文件产生的空提交。
// --ignore-unmatch:忽略文件不存在的错误
//   如果出现异常: Cannot rewrite branches: You have unstaged changes.git stash        # 暂存未提交改动git stash drop   # 完成后删除暂存//5.删除指向旧提交的指针
rm -rf .git/refs/original/
//6.删除log
rm -rf .git/logs/
// 7.放弃所有未关联对象恢复的可能性
git reflog expire --expire=now --all// 8.清理垃圾重新打包git repack -A -d    //重新打包git gc --aggressive --prune=now //清理垃圾,重新打包// 9.检查是否完整
git fsck --full --unreachable
// 10.最后推送git push --forcegit push --force --all  # 强制推送所有分支git push origin 本地分支:远程分支 --force

在这里插入图片描述

http://www.lqws.cn/news/582427.html

相关文章:

  • Kotlin空安全与异常处理
  • 国内Oracle大师认证
  • 深入比较 Gin 与 Beego:Go Web 框架的两大选择
  • 《燕云十六声》全栈技术架构深度解析
  • DFMEA检查表模板下载
  • js代码03
  • 第三十五章 I2S——音频传输接口
  • Reactor操作符的共享与复用
  • 回写缓存为何需要脏位?
  • Arduino IDE ESP8266连接0.96寸SSD1306 IIC单色屏显示北京时间
  • 2025年AI学习所感
  • 链表题解——两两交换链表中的节点【LeetCode】
  • 《Redis可扩展:轻松应对数据增长与流量高峰》
  • uni-app的生命周期
  • 云原生微服务架构搭建与部署全流程及样例
  • Spring Cloud Bus 和 Spring Cloud Stream
  • C语言main函数的原理:程序入口的奥秘
  • SpringCloud微服务 Eureka服务注册与发现
  • 从DeepMimic到带物理约束的MaskMimic——人形机器人全身运控的通用控制器:自此打通人类-动画-人形的训练路径
  • week1
  • WPF学习笔记(14)列表视图控件ListView与数据模板
  • demo01:基于 SpringMVC 的用户管理系统
  • Linux习题
  • 设计模式-观察者模式(发布订阅模式)
  • Redis 安装使用教程
  • RWKV-8 系列之 DeepEmbedAttention:精简 KV 缓存,尤其适合混合模型(RWKV-7s)
  • 使用pyflink进行kafka实时数据消费
  • 在 Vue3 + Element Plus 中实现 el-table 拖拽排序功能
  • mysql 小版本升级实战分享
  • 基于librdkafka开发的C++客户端,生产者生产发送数据失败问题处理