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

Git 常用命令与工作流程总结

Git 常用命令与工作流程总结

基本工作原则

  • 勤拉取:定期从远程仓库拉取最新代码,确保本地代码与远程同步。
  • 勤提交:保持小步提交,便于追踪代码变更。
  • 勤合并:频繁合并分支,减少未来冲突。

配置仓库信息

全局配置:


git config --global user.name "用户名"
git config --global user.email "邮箱地址"

项目级配置:

git init
git config --local user.name "用户名"

查看配置:

git config --list

三个区

  • 工作区:本地修改文件的地方。
  • 暂存区:使用 git add 后,文件进入暂存区,等待提交。
  • 版本库:使用 git commit后,文件进入版本库,永久存储。

常用 Git 命令

初始化仓库:

git init

添加文件到暂存区:

git add 文件名
git add .  # 添加所有修改

提交到版本库:

git commit -m "提交信息"

查看提交历史:

git log  # 完整日志
git log --oneline  # 简要日志

查看工作区状态:

git status

比较差异:

git diff  # 工作区与暂存区差异
git diff --cached  # 暂存区与最后一次提交差异

回退到某个版本:

git reset --hard 版本号

查看所有 Git 操作记录:

git reflog

撤销某次提交:

git revert commit-id

分支管理

创建分支:

git branch 分支名

查看所有分支:

git branch

切换分支:

git checkout 分支名

合并分支:

git merge 分支名

删除分支:

git branch -d 分支名

远程仓库管理

克隆远程仓库:

git clone 仓库地址

拉取远程分支:

git pull 远程仓库名 分支名

推送分支到远程仓库:

git push -u origin 分支名

Git Reset 用法

软回滚(保留工作区和暂存区的更改):

git reset --soft HEAD~1

混合回滚(重置暂存区,保留工作区的更改):

git reset --mixed HEAD~1

硬回滚(重置工作区和暂存区的更改):

git reset --hard HEAD~1

Rebase 和 Merge

Merge:适用于多个人开发同一个模块时,保留提交记录,便于排查问题。

  • 产生额外的合并提交:在进行 merge 操作时,两个分支(例如 master 和 feature)会合并到一起,生成一个额外的合并提交(merge commit)。这个合并提交包含了两个分支的历史,形成了一个不连续的、叉开的历史树结构。

  • 保留完整的提交历史:合并后的历史会包含两个分支所有的提交记录。这意味着每个分支的独立历史都被保留,整个历史图上会出现多条分支轨迹。

Rebase:适用于模块无关联的情况下,保持提交历史的线性。

  • 重新排列提交历史:rebase 操作会将 feature 分支的提交放置在 master 分支的最新提交之后,生成一个线性、干净的历史,没有额外的合并提交。提交的顺序可以发生变化。
  • 形成线性历史:rebase 后的历史更加简洁、线性。合并时不会产生额外的 merge commit,最终的历史看起来像是所有的提交都是在同一个分支上完成的,没有分叉点。

分支开发流程

开发分支 → 主分支:
开发功能:

git checkout -b 开发分支名

合并到主分支:

git merge develop

注意的点

  • 在开发分支开发完成,把修改同步到线上 然后切换到主分支,然后pull
  • 然后切换到开发分支,合并主分支到开发分支,然后push,这样你的分支就会保留你的修改并且和主分支同步
  • 然后切换到主分支,合并开发分支,然后push,这样主分支就会添加你的开发分支修改内容
  • 这样可以最小减少冲突,还能让你的分支和主分支同步

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 域自适应,你适应了嘛?
  • 快讯 | OpenAI 找回场子:chatgpt-4o-latest 刷新多项AI跑分纪录
  • 1.Linux_常识
  • Anaconda安装jupyter notebook、jupyterlab及体验
  • 如何快速掌握一款MCU
  • selenium爬取搜狗网站新闻的小Demo
  • 【自用】Python爬虫学习(一):爬虫基础与四个简单案例
  • petalinux-config -c busybox 报错
  • Linux2.6内核进程调度队列详细讲解
  • XXX【4】策略模式
  • ffmpeg开发者视频剪辑器
  • 【python】OpenCV—Optical Flow
  • 人工智能的新兴能力:我们是在追逐神话吗
  • 网络协议九 应用层 HTTPS
  • LeetCode 205 同构字符串
  • python3.6+scrapy+mysql 爬虫实战
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • 〔开发系列〕一次关于小程序开发的深度总结
  • 30天自制操作系统-2
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • JavaScript服务器推送技术之 WebSocket
  • JS实现简单的MVC模式开发小游戏
  • leetcode98. Validate Binary Search Tree
  • Linux中的硬链接与软链接
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • webpack入门学习手记(二)
  • 关于springcloud Gateway中的限流
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 温故知新之javascript面向对象
  • 想写好前端,先练好内功
  • 项目管理碎碎念系列之一:干系人管理
  • 学习笔记TF060:图像语音结合,看图说话
  • 与 ConTeXt MkIV 官方文档的接驳
  • #数学建模# 线性规划问题的Matlab求解
  • (2024)docker-compose实战 (8)部署LAMP项目(最终版)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (k8s)Kubernetes 从0到1容器编排之旅
  • (备份) esp32 GPIO
  • (第30天)二叉树阶段总结
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (篇九)MySQL常用内置函数
  • (十)c52学习之旅-定时器实验
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (算法)大数的进制转换
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (已解决)报错:Could not load the Qt platform plugin “xcb“
  • (转)scrum常见工具列表
  • (转)Unity3DUnity3D在android下调试
  • (转)创业家杂志:UCWEB天使第一步
  • .apk 成为历史!
  • .gitignore文件---让git自动忽略指定文件
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes