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

代码管理工具——Git基本使用方法

目前的新项目需要用到Git的管理工具,之前一直在用SVN,在这学习总结一下。方便后续进行搜索查询

目录

一、什么是Git

二、安装配置

三、Git的相关术语及其解释

核心术语

四、Git相关操作命令

1、配置命令git config

2、仓库操作

3、文件状态与提交

4、远程仓库交互

5、分支操作

6、合并与冲突

1、在冲突的文件中解决:(常用)

2、在命令编辑器中解决冲突:

7、版本回溯

8、其他常用命令

五、结语


一、什么是Git

Git 由Linus Torvalds于2005年创建,用于开发Linux内核。用于高效管理项目版本,尤其适用于软件开发中的代码追踪和协作。
Git是一个开源的分布式版本控制系统。为了协调开发人员之间的工作。允许在同一个工作区跟踪,并与团队成员一起工作。
Git是GitHub和GitLab等许多服务的基础,但我们可以在不使用任何其他Git服务的情况下使用Git。

总结来说,就是团队开发以及版本控制的一种项目管理工具,目前比较常见的还有SVN,顺便简单总结一下二者的区别吧。

维度GitSVN
架构分布式(每个用户有完整仓库副本)集中式(所有操作依赖中央服务器)
历史记录本地存储完整历史,可离线操作仅服务器存储历史,需联网访问
分支模型轻量级分支,合并高效分支是目录副本,合并复杂
速度本地操作极快(无网络延迟)网络依赖强,操作可能较慢
冲突解决提交前本地解决冲突提交时可能遇到服务器冲突
权限管理较简单(依赖代码托管平台)精细化的目录级权限控制

想要更深的理解一下呢,下面这位博主的总结比较好,大家可以看看:

git和svn的区别 - 腾讯云开发者社区 - 腾讯云

二、安装配置

官网地址:

Git - Downloading Package

根据电脑选择适合的安装包下载安装(安装最好安装在英文目录下,没有特别需要注意的,都进行Next选择就可以)

安装好之后一般都使用Git Bash(命令模式)进行命令行操作(因此需要大家有一定的linux基本操作命令知识)

Git GUI(窗口模式),也可以进行代码提交,但是一般不建议使用

1、cd : 改变目录。

2、cd . . 回退到上一个目录,直接cd进入默认目录

3、pwd : 显示当前所在的目录路径。

4、ls(ll):  都是列出当前目录中的所有文件,只不过ll(两个ll)列出的内容更为详细。

5、touch : 新建一个文件 如 touch index.js 就会在当前目录下新建一个index.js文件。

6、rm:  删除一个文件, rm index.js 就会把index.js文件删除。

7、mkdir:  新建一个目录,就是新建一个文件夹。

8、rm -r :  删除一个文件夹, rm -r src 删除src目录

rm -rf / 切勿在Linux中尝试!删除电脑中全部文件!

9、mv 移动文件, mv index.html src index.html 是我们要移动的文件, src 是目标文件夹,当然, 这样写,必须保证文件和目标文件夹在同一目录下。

10、reset 重新初始化终端/清屏。

11、clear 清屏。

12、history 查看命令历史。

13、help 帮助。

14、exit 退出。

15、#表示注释

下面这个博主的总结很全面,可以参考:

Linux基础操作命令_linux基础命令-CSDN博客

下来有时间也会讲一些Linux的系统命令,有想要了解和支持的可以关注一下

三、Git的相关术语及其解释

核心术语

  1. 仓库(Repository):存储项目代码和版本历史的目录,分为本地仓库和远程仓库(如 GitHub、GitLab)。

  2. 工作区(Working Directory):当前编辑的文件目录,即项目的实际文件。

  3. 暂存区(Staging Area):临时存储待提交的修改,介于工作区和本地仓库之间。

  4. 提交(Commit):将暂存区的修改保存到本地仓库,生成一个版本记录(有唯一哈希值)。

  5. 分支(Branch):独立的开发线,默认主分支为 main 或 master,可创建分支并行开发。

  6. 合并(Merge):将一个分支的修改整合到另一个分支(如功能分支合并到主分支)。

  7. 冲突(Conflict):合并时多个分支修改了同一文件的同一部分,需要手动解决。

  8. 远程仓库(Remote):托管在服务器上的仓库,用于多人协作共享代码(如 origin 通常指远程仓库别名)。

  9. 克隆(Clone):将远程仓库完整复制到本地。

  10. 拉取(Pull):从远程仓库获取最新代码并合并到本地分支(等价于 fetch + merge)。

  11. 推送(Push):将本地仓库的提交推送到远程仓库。

  12. 远程仓库别名(Origin)

     它本质是一个 “快捷方式”,避免你每次操作远程仓库时都输入完整的 URL(如 https://github.com/username/repo.git
    • 当你克隆(git clone)一个仓库时,Git 会自动将远程仓库地址命名为 origin。 
    • origin 是 Git 为远程仓库(如 GitHub、GitLab 上的仓库)分配的默认别名。

  • # 推送本地 main 分支到远程 origin 的 main 分支
    git push origin main# 从远程 origin 的 main 分支拉取代码
    git pull origin main# 等价于
    git push https://github.com/username/repo.git main
    git push https://github.com/username/repo.git main

13. 获取远程更新(Fetch): 不会修改本地仓库的代码

  1. git fetch 用于从远程仓库获取最新的代码和分支信息,但不会自动合并到本地分支。

  2. 它的作用是 “同步远程仓库的状态到本地”,让你在合并前先查看远程有哪些更新。

# 获取远程 origin 的所有更新(所有分支)
git fetch origin# 查看远程 main 分支与本地 main 分支的差异
git diff main origin/main# 获取远程新分支 feature/new 到本地
git fetch origin# 在本地创建并切换到该分支(跟踪远程分支)
git checkout -b feature/new origin/feature/new

四、Git相关操作命令

1、配置命令git config

git config 主要分为三种配置级别:

· local                # 本地,文件存在 .git/config目录中

· global             # 全局,存储在git安装的用户目录下(常用,一台电脑一个用户)

· system           # 整个系统用户,所有用户和系统都是相同配置

# 配置提交人的用户名和邮箱
git config --global user.name "Your Name"  
git config --global user.email "email@example.com"# 查看已经配置好的各种信息
git config --list

2、仓库操作

# 初始化本地仓库(在当前目录创建.git文件夹)
git init# 克隆远程仓库到本地
git clone <远程仓库地址>  # 例如:git clone https://github.com/example/repo.git

3、文件状态与提交

本地仓库的提交文件

# 查看工作区和暂存区状态(哪些文件被修改/新增/删除)
git status# 将工作区文件添加到暂存区
git add <文件名>       # 添加指定文件
git add .             # 添加所有修改的文件# 将暂存区的修改提交到本地仓库(-m 后跟提交说明,也就是注释)
git commit -m "提交说明:如修复登录bug"# 跳过暂存区,直接提交工作区已跟踪的文件(未新增的文件)
git commit -am "提交说明"

4、远程仓库交互

提交或者拉取到远程服务器上

# 查看远程仓库信息
git remote -v# 关联远程仓库(本地仓库未关联时)
git remote add origin <远程仓库地址># 拉取远程仓库的最新代码并合并到当前分支
git pull origin <分支名>  # 例如:git pull origin main# 将本地分支推送到远程仓库(-u 首次推送时关联分支,后续可直接 git push)
git push -u origin <分支名>  # 例如:git push -u origin feature/login

5、分支操作

我们一般新建远程仓库的时候,都是主分支main/master,我们之前提到过多版本控制,一般我们在开发的时候为了确保已经搭建好的框架和逻辑,

在进行新的开发,或者多人开发不同的功能时,为了不影响其他人的操作开发,一般都是新建分支开发,确认无误后在合并

# 查看所有分支(当前分支前有*)
git branch# 创建新分支
git branch <分支名>    # 例如:git branch feature/login# 切换到指定分支
git checkout <分支名>  # 例如:git checkout feature/login
# 或(Git 2.23+ 推荐)
git switch <分支名># 创建并切换到新分支
git checkout -b <分支名>  # 等价于 git branch + git checkout
# 或
git switch -c <分支名># 删除分支(需先切换到其他分支)
git branch -d <分支名>  # 若分支有未合并的修改,用 -D 强制删除

6、合并与冲突

1、在冲突的文件中解决:(常用)

我们在合并分支时,可能会与其它团队协作者修改了同一个文件,从而造成了冲突,这就需要我们解决冲突,需要手动合并冲突文件之后再次提交

# 合并分之前,可以查看两个分支有什么不同
git diff main feature# 切换到目标分支(如主分支),合并来源分支(如功能分支)
git checkout main
git merge feature/login  # 将 feature/login 的修改合并到 main# 若合并冲突,先解决冲突文件,再提交
# 需要找到冲突文件,手动修改合并后再次提交(其中HEAD是远程主分支,===是当前分支)
git add <冲突文件>
git commit -m "解决合并冲突"

2、在命令编辑器中解决冲突:

当不同的人同时修改了同一个文件提交时(例如在你修改test文件时,你的同事B在此时间也修改了test文件,并提交到远程仓库上了,这时你在提交的时候就会出现冲突)

 在解决冲突的时候可能会需要输入备注信息,或者合并文件操作,这时候就用到了我们之前总结的Linux中修改文件的方法,主要用到 :wq(保存退出) :q!(不保存退出)

关于Linux系统中修改配置文件的操作命令_linux怎么修改配置文件-CSDN博客

# 从远程获取最近代码
git pull --rebase origin main# 使用工具在命令中进行合并(:w!\:wq!\:q!)
git mergettool# 合并完成命令
git rebase --continue# 然后输入提交信息,再次推送到远程
git push origin main# 放弃本地修改的代码(慎用)
git merge --abort  # 终止合并,回到冲突前的状态

7、版本回溯

当需求变更时,新的开发逻辑不再需要时,可以进行版本回退

# 查看提交历史(简洁版加 --oneline)
git log
git log --oneline  # 每行显示一个提交,只显示哈希前缀和说明# 本地回退的三种方法
# 1、回退版本且保留工作区修改(文件内容不变)
git reset --soft <commit-hash># 2、回退版本且重置暂存区(保留工作区修改,需重新 git add)
git reset --mixed <commit-hash>  # --mixed 是默认选项# 3、回退到指定版本(哈希值取前7位即可)
git reset --hard <提交哈希>  # 谨慎使用,会丢弃当前工作区修改# 查看所有操作记录(包括已删除的提交),用于找回误删版本
git reflog

8、其他常用命令

# 放弃工作区的修改(恢复到最近一次提交的状态)
git checkout -- <文件名>  # 或 git restore <文件名>(Git 2.23+)
git checkout -- .        # 所有文件# 从暂存区移除文件(不删除物理文件)
git reset HEAD <文件名>  # 或 git restore --staged <文件名>(Git 2.23+)
git reset HEAD .        # 所有文件# 暂存当前工作区,切换到其他分支(用于临时切换分支时保存工作进度)
git stash         # 暂存
git stash pop     # 恢复暂存并删除记录# 同时撤销工作区和暂存区的修改(谨慎使用,完全清口本地的所有修改了)
git reset --hard HEAD# 恢复误删的未提交修改
git fsck --lost-found  # 查找丢失的文件

掌握这些基础命令和术语,就能应对大部分日常开发场景。复杂操作(如变基 rebase、标签 tag 等)可在熟悉基础后逐步学习。

五、结语

下面这位博主把部分原理也给大家解释了一下,有兴趣的小伙伴可以了解一下

视频同步笔记:狂神聊Git

其实现在大部分开发工具有具有Git的快捷操作,例如pycharm、idea、visual studio等都可以快捷操作而省略命令,但是建议大家掌握这些命令,技多不压身。

好了,这篇文章大概已经完成了,后续在使用过程中遇到问题会修改补充文章,有兴趣的小伙伴可以点赞关注收藏。

http://www.dtcms.com/a/325353.html

相关文章:

  • 架构设计(15):AI时代的架构设计
  • 系统编程——信号通信
  • MySQL-日志
  • 第10节 大模型分布式推理典型场景实战与架构设计
  • Java 大视界 -- Java 大数据在智能安防视频监控系统中的多目标跟踪与行为分析优化(393)
  • 低代码开发实战案例,如何通过表单配置实现数据输入、数据存储和数据展示?
  • Docker-08.Docker基础-本地目录挂载
  • Camera open failed
  • Flutter SharedPreferences存储数据基本使用
  • Apollo平台下相机和激光雷达手眼联合标定
  • 面试题-----RabbitMQ
  • RabbitMQ 消息转换器详解
  • OV5640 相机开发流程
  • 闸机控制系统从设计到实现全解析:第 5 篇:RabbitMQ 消息队列与闸机通信设计
  • C语言:贪吃蛇游戏
  • MiniCPM-V 4.0开源,号称是手机上的GPT-4V
  • 41.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--扩展功能--集成网关--网关集成Swagger
  • 量子计算:叩响金融定价革命的大门——期权定价的范式转移
  • 用Python实现Excel转PDF并去除Spire.XLS水印
  • glide缓存策略和缓存命中
  • 基于 JavaWeb+MySQL设计实现博客管理系统
  • [激光原理与应用-230]:物理学主要分支、研究对象、衍生技术及职业方向解析
  • 智慧零售的本质重构与技术创新:基于定制开发开源AI智能名片S2B2C商城小程序的实践路径
  • Redis应⽤-缓存与分布式锁
  • MySQL误删数据了,如何快速恢复?
  • GraalVM !拥抱云原生的 JVM
  • AI驱动的智能编码革命:从Copilot到全流程开发自动化
  • 2024年ESWA SCI1区TOP,自适应种群分配和变异选择差分进化算法iDE-APAMS,深度解析+性能实测
  • SysTick定时器的工作原理是什么
  • 在Linux中模拟配置高性能web服务器