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

Git实战演练,模拟日常使用,快速掌握命令

01 引言

上一期借助Idea,完成了Git仓库的建立、配置、代码提交等操作,初步入门了Git的使用。然而日常开发中经常面临各种各样的问题,入门级的命令远远不够使用。

这一期,我们将展开介绍Git的日常处理命令,解决日常问题,熟悉Git操作。

02 Git分支管理

一个新的项目开始,我们需要从主干分支上拉取开发分支。我们还是以上一期的project-test 仓库为例。

2.1 创建新的分支

按照下图所示操作:

创建dev-20250520分支:

Git命令:

# 创建新分支
git checkout -b dev-20250520 origin/main# 切换分支
git checkout dev-20250520

查看所有本地和远程分支:
在这里插入图片描述

对应的命令:

# 查看所有本地和远程分支
git branch -a# 查看远程分支
git branch -r# 查看本地所有分支
git branch

2.2 提交代码

编写实例代码,直接提交到本地仓库。

其实也可以直接从控制台看看Git执行了哪些命令:

2.3 推送到远程仓库

首次推送到远程仓库会自动创建分支名的远程仓库分支。正常开发中我们的代码应该是直接从分支项目检出的,不需要创建远程仓库的分支。

远程仓库查看:

03 处理冲突

为了制造冲突,直接在GitHub上修改GitTest.java文件。

3.1 制造冲突

本地修改同一个文件(GitTest.java),提交本地仓库没有冲突,但是推送远程仓库时,就会出现冲突。

image-20250520171334778

3.2 解决冲突

冲突的解决保留历史分支记录,我们一般会选择Merge处理。

选择Merge之后,Git会自动从远程仓库拉取最新的代码,并在工作区标记处冲突的位置(如上图)。我们通过Idea继续Merge处理冲突。

左右两侧分别表示本地仓库和远程仓库,中间是处理的最终结果。黄色代表相对去中间工作区的改动的地方。点击箭头即可完成代码移动。

假设我们两边的代码都需要,我们只要一次点击箭头即可完成代码的合并(冲突的解决),再次提交到本地仓库。

代码提交到本地仓库之后,就可查看该分支的所有变更记录:

也可以通过命令查看:

# 查看历史提交记录
git log

命令结果:

最后推送到远程仓库即可。

04 代码回滚

代码回滚是一个优秀的设计。网上不是有这样的梗,产品做了第一版方案后给老板看,老板觉得不满意,然后来来回回的改,最后老板觉得还是第一版比较好。产品的心中一万只羊驼奔腾而过。

程序员同样面临的这样的场景,但是代码回滚完美的解决了这样的问题。

我们模拟三版提交方案。在GitTest.java增加提交的版本信息:

/***  第一版提交方案*/
private void firstCase() {System.out.println("第一版Case");
}/***  第二版提交方案*/
private void secondCase() {System.out.println("第二版Case");
}/***  第三版提交方案*/
private void thirdCase() {System.out.println("第三版Case");
}

假设我们要回到第一版的方案:

选中第一版记录,然后右键复制版本号

4.1 未推送远程的回滚

命令:

# --hard 底回退到指定提交,丢弃所有未提交的更改
# –mixed(默认):移动 HEAD 并重置暂存区,但保留工作区修改
# –soft:仅移动 HEAD,保留工作区和暂存区
git reset --hard 回退的版本号

结果迅速到达第一版:

4.2 已推送至远程的回滚

命令:

# 回退到指定的版本号
git revert 版本号

如果是相同的位置的代码修改可能会出现冲突,正常解决即可

解决之后,需要重洗提交代码。

05 合并分支

代码合并阶段一般是出现在开发分支过久,迭代多次需要合并新分支,另外一个就是发布代码之后,必须将代码合并到主干上。

案例中我们一直在dev-20250520开发,我们将开发分支合并到主干(main)分支上。首先我们需要需要切换分支到主干分支上。

切换分支的命令:

# 切换到主干分支上
git checkout main

Idea的操作:

切到主干分支发现并没有GitTest.java的文件:

分支合并:

合并之后代码会之间保存到暂存区,直接推送到远程即可:

06 小结

今天就一个简单的模拟实战项目,练习了Git日常处理问题的命令。如果有什么更加有趣的命令,评论区留言讨论!

相关文章:

  • Vue 3.0中异步组件defineAsyncComponent
  • 前端 git仓库
  • 深入学习和对比Python 列表与元组
  • Win 系统 conda 如何配置镜像源
  • 为 Scade 6 编译器提供形式化认证工具的考虑 (2010)
  • LCI输出频率配置方法
  • Vue.js教学第十章:自定义命令的创建使用与应用
  • Android-RecyclerView学习总结
  • 新疆工程系列建筑专业职称评审条件
  • 流程引擎选型指南
  • zabbix 常见问题
  • 繁体字与简体中文转换
  • 基于springboot+vue的人口老龄化社区服务与管理平台(源码+数据库+文档)
  • 火语言UI组件--控件事件触发
  • 测试文章1
  • Keil5 MDK LPC1768 RT-Thread KSZ8041NL uIP1.3.1实现UDP网络通讯(服务端接收并发数据)
  • Unity基础学习(六)Mono中的重要内容(2)协同程序
  • XXE(外部实体注入)
  • 我店模式系统开发打造本地生活生态商圈
  • 【深度学习-Day 15】告别“盲猜”:一文读懂深度学习损失函数
  • 做网站几个步骤/百度推广服务费一年多少钱
  • 计算机系毕设代做网站/软文代写服务
  • 网站建设方案书 下载/东莞关键词优化推广
  • cms系统创建静态网站/站长之家排行榜
  • 做网站架构需要什么工具/四平网络推广
  • 素马杭州网站设计介绍/google chrome 网络浏览器