浅显易懂的Git教程

news2024/9/22 17:37:21

Git概述

SVN与Git的对比

SVN(Subversion)

类型:集中式版本控制系统

工作流程:

  1. 从中央服务器下载最新版本到本地。
  2. 在本地进行开发。
  3. 提交更改回中央服务器。

优点:

  • 简单易用,适合小型团队。
  • 版本历史清晰。

缺点:

  • 单点故障:中央服务器宕机会导致无法访问版本库。
  • 容错性差:需要网络连接进行大多数操作。

Git

类型:分布式版本控制系统

优点:

  • 高效的分支和合并管理。
  • 无需网络连接即可进行大多数操作。
  • 更好的容错性,避免单点故障。

缺点:

  • 学习曲线相对较陡。
  • 对于小团队可能显得复杂。

Git工作流程

  1. 克隆远程仓库:使用 git clone 命令将远程仓库的代码复制到本地,创建一个完整的本地仓库。
  2. 检出代码并修改:使用 git checkout 切换到需要修改的分支,进行代码修改。
  3. 暂存代码:使用 git add 将修改的文件添加到暂存区,准备提交。
  4. 提交到本地仓库:使用 git commit 将暂存区的更改提交到本地仓库,记录修改的历史版本。
  5. 推送到远程仓库:使用 git push 将本地仓库的更改推送到远程仓库,与团队成员共享代码。

Git安装

下载地址: https://git-scm.com/download

找到对应电脑系统的网址:  

 配置选择,一直点击下一步即可: 

这里选择Git编辑器 Git 安装程序里面内置了 10 种编辑器,比如 Atom、Notepad、Notepad++、Sublime Text、Visual Studio Code、Vim 等等,根据需要自行选择,点击Next下一步继续

后面的就一直点next

环境配置

安装 Git 后首先要设置用户名称和 email 地址,因为每次 Git 提交都会使用该用户信息,此信息和注册的代码托管平台的信息无关

设置用户信息:

  • git config --global user.name “Seazean”

  • git config --global user.email "imseazean@gmail.com" //用户名和邮箱可以随意填写,不会校对

查看配置信息:

  • git config --list

  • git config user.name

通过上面的命令设置的信息会保存在用户目录下 /.gitconfig 文件中

本地仓库

获取仓库

  • 本地仓库初始化

    1. 在电脑的任意位置创建一个空目录(例如 repo1)作为本地 Git 仓库

    2. 进入这个目录中,点击右键打开 Git bash 窗口

    3. 执行命令 git init

      如果在当前目录中看到 .git 文件夹(此文件夹为隐藏文件夹)则说明 Git 仓库创建成功

  • 远程仓库克隆 通过 Git 提供的命令从远程仓库进行克隆,将远程仓库克隆到本地

    命令:git clone 远程 Git 仓库地址(HTTPS 或者 SSH)

  • 生成 SSH 公钥步骤

    • 设置账户

    • cd ~/.ssh(查看是否生成过 SSH 公钥)user 目录下

    • 生成 SSH 公钥:ssh-keygen -t rsa -C "email"

      • -t 指定密钥类型,默认是 rsa ,可以省略

      • -C 设置注释文字,比如邮箱

      • -f 指定密钥文件存储文件名

    • 查看命令:cat ~/.ssh/id_rsa.pub

    • 公钥测试命令:ssh -T git@github.com

工作过程

版本库(.git)

定义:.git 文件夹是Git的核心,包含所有版本控制的信息。

内容:

  • 配置信息:包括用户信息、远程仓库地址等。
  • 日志信息:记录了提交历史和变更信息。
  • 对象数据库:存储所有文件的版本和快照。

工作目录(工作区)

定义:工作目录是包含 .git 文件夹的主目录,主要用于存放开发代码。

特点:

  • 直接与代码进行交互,可以在这里编辑、删除或添加文件。
  • 代码的当前状态可以在此查看。

暂存区(Stage / Index)

定义:暂存区是一个临时存储修改的区域,通常存储在 .git/index 文件中。

功能:

  • 允许你选择性地添加修改到下一个提交,支持分步提交。
  • 确保只有经过验证的文件才会被提交到版本库。

常用命令

  • git status:非常重要,可以清楚地查看哪些文件已修改、已暂存或未跟踪。
  • git add filename:可以使用 git add . 来添加所有更改的文件。
  • git commit -m 'message':建议在消息中描述更改内容,以便于未来回顾。
  • git rm filename:如果删除了文件,建议立即执行 git commit,确保版本更新。
  • git mv filename:移动文件时,这条命令会自动处理跟踪关系,保持文件历史。
  • git reset filename:可用于将特定文件从暂存区移回工作区,便于进一步编辑。
  • git checkout filename:需谨慎使用,因为会丢失未保存的修改。
  • git log:可用 git log --oneline 查看简洁版本。
  • git reflog:非常有用,能帮助恢复意外删除的提交。

其他指令说明

  • git commit -a:此命令会自动将所有已跟踪文件的修改添加到暂存区,然后直接执行提交。注意:只会添加已跟踪的文件,对于新文件(未跟踪的文件)不会包含在提交中。
  • git checkout HEAD -- files:该命令用于将指定文件恢复到最后一次提交的状态,所有未保存的修改将被丢弃。使用时要谨慎,确保重要修改已备份或确认不需要保留。

文件状态

Untracked(未跟踪):

这些文件尚未被Git纳入版本控制,通常是新创建的文件。

Tracked(已跟踪):

包含三种子状态:

  • Unmodified(未修改):自上次提交以来没有变更。
  • Modified(已修改):自上次提交以来有更改但未暂存。
  • Staged(已暂存):已将更改添加到暂存区,准备提交。

查看文件状态

  • git status:提供详细的状态信息,帮助了解当前项目的文件状态。
  • git status -s:以简洁的方式列出文件状态,适合快速查看。

文件忽略

一般我们总会有些文件无需纳入Git 的管理,也不希望它们总出现在未跟踪文件列表。 通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。 在这种情况下,我们可以在工作目录中创建一个名为 .gitignore 的文件(文件名称固定),列出要忽略的文件模式。

# 忽略所有日志文件
*.log

# 忽略临时文件
temp/

远程仓库

工作流程

Git 有四个工作空间的概念,分别为 工作空间、暂存区、本地仓库、远程仓库。

  • 工作空间:本地文件夹中正在处理的代码和文件,进行修改和编辑的地方。
  • 暂存区(Staging Area):用于临时存储即将提交的更改。当你使用 git add 命令时,文件会被放入暂存区。
  • 本地仓库:存储所有版本历史的地方。你可以通过 git commit 命令将暂存区的更改保存到本地仓库中。
  • 远程仓库:存储在网络上的版本库,通常用于协作。常见的远程仓库有GitHub、gitee等。

远程操作

  • git fetch:从远程仓库获取最新的提交和更新,但不会自动合并到你的工作空间。需要手动合并(使用 git merge)。
  • git pull:相当于先执行 git fetch,然后再自动合并远程更改到当前分支。可以看作是 fetch + merge 的组合。

常用命令

查看仓库

  • git remote:列出所有远程仓库的简写,有助于快速查看当前配置。
  • git remote -v:显示远程仓库的URL,便于确认远程地址是否正确。
  • git remote show <shortname>:提供远程仓库的详细信息,包括分支信息、追踪状态等。

添加仓库

  • git remote add <shortname> <url>:添加新的远程仓库,确保URL格式正确(例如HTTPS或SSH)。

克隆仓库

  • git clone <url>:会创建一个本地副本,并自动设置远程仓库的默认名称为origin。

删除仓库

  • git remote rm <shortname>:移除本地对远程仓库的引用,不会影响远程仓库的内容。

拉取仓库

  • git fetch <shortname>:获取远程仓库的更新,但不进行合并,适合检查变更。
  • git pull <shortname> <branchname>:拉取并合并,通常用于更新当前分支。当出现 fatal: refusing to merge unrelated histories 时,解决此问题可以在 git pull 命令后加入--allow-unrelated-histories 参数。

推送仓库

  • git push <shortname> <branchname>:将本地分支推送到指定的远程分支,确保有推送权限。

其他建议

  • 定期使用 git status 检查当前状态,确保工作区的变更和分支状态清晰。
  • 使用 git log 查看提交历史,有助于追踪更改和版本控制。
  • 结合使用 .gitignore 文件,以防止不必要的文件被推送到远程仓库。

版本管理

使用 Git 进行版本管理可以帮助我们跟踪和管理代码的历史记录。

git reset --hard <commit_hash>

这里的 <commit_hash> 是我们想要切换到的版本的唯一索引值(commit ID)。

注意事项

数据丢失风险:

使用 --hard 选项会丢弃所有未提交的更改,包括工作区和暂存区的更改。如果你有未保存的工作,确保先备份或使用 git stash。

查看提交历史:

在执行重置之前,可以使用以下命令查看提交历史,以找到想要切换的版本:

git log

恢复到最新状态:

如果我们需要恢复到最新的提交,可以使用:

git reset --hard origin/<branch_name>

创建新分支:

如果我们想在旧版本上进行修改而不影响主分支,可以考虑先创建一个新分支:

git checkout -b <new_branch_name> <commit_hash>

分支管理

分支的好处

  • 隔离开发:不同特性或修复可以在独立分支上开发,避免相互影响。
  • 并行工作:多个团队或开发者可以同时在不同分支上工作,提高效率。
  • 简化合并:在完成特性后,可以将分支合并回主分支,确保整合稳定。
  • 试验和回滚:可以在分支上进行试验,若不满意可轻松回滚而不影响主线代码。
  • 版本控制:清晰记录每个特性或修复的开发过程,便于管理和审查。

常用命令

查看分支

  • git branch:列出所有本地分支。
  • git branch -r:列出所有远程分支。
  • git branch -a:列出所有本地和远程分支。

创建分支

  • git branch branch-name:创建新分支,但仍在当前分支。
  • git checkout -b branch-name:创建并切换到新分支。

推送分支

  • git push origin branch-name:将新分支推送到远程仓库。

切换分支

  • git checkout branch-name:切换到指定的分支。

合并分支

  • git merge branch-name:将指定分支合并到当前分支。处理冲突时,需要手动解决文件冲突后执行 git add,然后提交合并。

删除分支

  • git branch -d branch-name:删除本地分支(需确保已合并)。
  • git push origin --delete branch-name:删除远程分支。(origin 是引用名)
  • git branch -D branch-name:强制删除本地分支,即使未合并。

标签管理

查看标签

  • git tag:列出所有本地标签。
  • git show tag-name:查看指定标签的详细信息,包括标签信息和对应的提交。

标签作用:标签用于在项目的关键时刻(如发布版本、重大修改或升级)保存快照,便于永久标记项目历史的重要阶段。

新建标签

  • git tag tag-name:创建一个新标签,如 git tag v1.0.1。

推送标签

  • git push [remotename] [tagname]:将指定标签推送到远程仓库。
  • git push [remotename] --tags:推送所有本地标签到远程仓库。

切换标签

  • git checkout tag-name:切换到指定标签。请注意,切换到标签时,工作目录会进入“分离头指针”(detached HEAD)状态。

删除标签

  • git tag -d tag-name:删除本地标签。
  • git push origin :refs/tags/tag-name:删除远程标签。

IDEA使用git

环境配置

File → Settings 打开设置窗口,找到 Version Control 下的 git 选项

选择 git 的安装目录后可以点击 Test 按钮测试是否正确配置

创建仓库

1、VCS → Import into Version Control → Create Git Repository

2、选择工程所在的目录,这样就创建好本地仓库了

3、点击git后边的对勾,将当前项目代码提交到本地仓库

注意: 项目中的配置文件不需要提交到本地仓库中,提交时,忽略掉即可

分支管理

  • 创建分支:VCS → Git → Branches → New Branch → 给分支起名字 → ok

  • 切换分支:idea 右下角 Git → 选择要切换的分支 → checkout

  • 合并分支:VCS → Git → Merge changes → 选择要合并的分支 → merge

  • 删除分支:idea 右下角 → 选中要删除的分支 → Delete

推送仓库

  1. VCS → Git → Push → 点击 master Define remote

  2. 将远程仓库的 url 路径复制过来 → Push

克隆仓库

File → Close Project → Checkout from Version Control → Git → 指定远程仓库的路径 → 指定本地存放的路径 → clone

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2144386.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【源代码+仿真+原理图+技术文档+演示视频+软件】基于物联网的多功能手环设计与实现

摘 要 随着社会进步和生活水平的提高&#xff0c;人们对健康的重视程度不断增加。为了更好地了解自身的身心健康状况&#xff0c;人们对高精密、便携式医疗监控仪器的需求也越来越大。电子信息技术和医学的发展相互促进&#xff0c;二者的结合可以解决人们在健康问题上的困扰…

单通道低压全桥驱动芯片既可应用在电子锁,医疗器械等产品中也能直接Pin to pin贝岭的BL8123

芯片描述 GC8123 是一款低压 5V 全桥驱动芯片&#xff0c;为摄像机、消费类产品、玩具和其他低压或者电池供电的运动控制类应用提供了集成的电机驱动解决方案。GC8123 能提供高达 1.2A 的持续输出电流。可以工作在 1.2~6V 的电源电压上。GC8123 具有 PWM&#xff08;IN/IN&…

Git使用教程-将idea本地文件配置到gitte上的保姆级别教程

&#x1f939;‍♀️潜意识起点&#xff1a;个人主页 &#x1f399;座右铭&#xff1a;得之坦然&#xff0c;失之淡然。 &#x1f48e;擅长领域&#xff1a;前端 是的&#xff0c;我需要您的&#xff1a; &#x1f9e1;点赞❤️关注&#x1f499;收藏&#x1f49b; 是我持…

Linux配置静态IP详细步骤及联网问题,以及更改主机名问题

一&#xff0c;Linux配置静态IP详细步骤及联网问题 我的Linux操作系统版本是是CentOS7/CentOS8 1.网络适配器&#xff1a;NAT模式点击设置-网络适配器-网络连接 &#xff08;选择NAT模式&#xff09;-点击确定 2.查看网关相关配置点击 编辑-虚拟网络编辑器-选择VMnet8-点击更…

python 环境问题

日常环境问题记录 1、pycharm 终端禁止运行脚本1.1 问题描述1.2 以管理员身份运行powershell1.3 修改权限 1、pycharm 终端禁止运行脚本 1.1 问题描述 当我在pycharm终端执行脚本&#xff0c;比如 activate激活虚拟环境时&#xff0c;会报错不让执行 这类问题的出现原因是没…

操作系统相关

操作系统 1. 操作系统主要功能 进程管理 功能&#xff1a;创建、调度、终止进程&#xff0c;管理进程的执行。目的&#xff1a;确保多个进程能够有效地共享处理器资源&#xff0c;并进行合理的调度和管理。 内存管理 功能&#xff1a;分配和管理系统内存&#xff0c;包括虚拟…

02 基于STM32的按键控制继电器驱动电机

本专栏所有源资料都免费获取&#xff0c;没有任何隐形消费。 注意事项&#xff1a;STM32仿真会存在各种各样BUG&#xff0c;且尽量按照同样仿真版本使用。本专栏所有的仿真都采用PROTEUS8.15。 本文已经配置好STM32F103C8T6系列&#xff0c;在PROTUES仿真里&#xff0c;32单片…

系统编程-初识MCU

初识MCU 目录 初识MCU 一、什么是mcu&#xff1f; 二、MCU 的组成与作用 三、常见的MCU 四、家用空气质量检测仪项目分析 1、项目市场调研 2、项目需求分析&#xff08;重要&#xff09; 3、产品的硬件设计 五、常用元器件以及对应电路介绍(重点) 1、电阻 2、电容 …

怎么使用Chrome与C++实现高效自动化测试

在软件开发过程中&#xff0c;自动化测试是确保代码质量和稳定性的关键步骤。谷歌浏览器&#xff08;Chrome&#xff09;提供了强大的开发者工具和丰富的API&#xff0c;结合C的强大功能&#xff0c;可以实现高效的自动化测试。本文将介绍如何使用Chrome和C来实现这一目标。&am…

路径规划算法-蚁群算法

一、蚁群算法&#xff08;ACO&#xff09;基本原理 winter老哥链接 蚁群路径规划算法&#xff08;Ant Colony Optimization, ACO&#xff09;是一种模拟蚂蚁觅食行为的启发式优化算法&#xff0c;它通过模拟蚂蚁在寻找食物过程中的路径选择和信息素交流来解决路径规划问题。以下…

图片文字翻译怎么快速翻译?5个软件教你快速进行图片文字翻译

图片文字翻译怎么快速翻译&#xff1f;5个软件教你快速进行图片文字翻译 图片文字翻译是日常工作和生活中常见的需求&#xff0c;尤其是在处理外文资料或旅游时。以下5款优秀的软件可以帮助你轻松、快速地将图片中的文字进行翻译&#xff0c;让你不再依赖手动输入和繁琐操作。…

linux概述与安装虚拟机

linux 1.Linux 概述 Linux 是一个极具影响力和广泛应用的操作系统。 它起源于芬兰人林纳斯・托瓦兹在大学期间编写的开源内核。Linux 作为一个整体&#xff0c;是免费供用户使用的&#xff0c;具备多用户、多任务、支持多线程的强大特性。 Linux 内核是其核心部分&#xff…

JAVA基础:线程优先级和精灵线程

目录 前言 线程优先级 精灵线程 前言 线程存在的目的是为了提升代码的效率&#xff0c;以前的程序只有主线程自己执行是串行的&#xff0c;这样的代码效率低 &#xff0c;多线程执行的代码是并行的&#xff0c;多个线程同时执行代码&#xff0c;这样的效率高&#xff0c;但是…

Verdin AM62 引脚复用配置

By Toradex 胡珊逢 简介 Verdin AM62 是 Toradex 基于 TI AM623/AM625 SoC 的 Arm 计算机模块。它最多提供 4 个 A53 和 1 个 M4F 处理器。这是 TI 基于其 K3 平台的处理器&#xff0c;虽然和 NXP 的 iMX8M Mini/Plus 都使用 A53 核心&#xff0c;但是由于架构不同&#xff0…

智能优化算法-遗传算法(GA)(附源码)

目录 1.内容介绍 2.部分代码 3.实验结果 4.内容获取 1.内容介绍 遗传算法 (Genetic Algorithm, GA) 是一种基于自然选择和遗传学原理的元启发式优化算法&#xff0c;它模仿了生物进化过程中的选择、交叉和变异操作来搜索最优解。 GA的工作机制主要包括&#xff1a; 选择&am…

1652AM任意波形发生器

1652AM 任意波形发生器 1652AM任意波形发生器是一款多通道、多功能的任意波形发生器。它在兼顾了输出信号高质量的同时&#xff0c;实现了高通道密度。它可与其它通用或专用模块化测试仪器构成综合测试系统或平台&#xff0c;支持众多解决方案&#xff0c;包括先进计算机调…

鹰眼降尘系统多少钱

关于鹰眼系统的价格&#xff0c;由于该系统可能涉及多个领域和不同的配置&#xff0c;因此价格范围可能相对较广。以下是朗观视觉小编对鹰眼系统价格的一些分析和说明&#xff1a; 一、价格影响因素 应用领域&#xff1a;鹰眼系统可能应用于不同的领域&#xff0c;如环保降尘、…

线性代数书中求解线性方程组的三种方法的实例

目录 一、克拉默法则(P45) 二、逆矩阵(P46) 三、高斯-约当消元法(P65) 一、克拉默法则(P45) 二、逆矩阵(P46) 三、高斯-约当消元法(P65)

c++11标准(1)右值引用和移动构造

欢迎来到博主的专栏&#xff1a;c杂谈 博主ID&#xff1a;代码小豪 文章目录 左值和左值引用右值和右值引用右值右值引用 右值引用的使用场景与意义 右值引用是c11标准推出的新特性&#xff0c;在此之前&#xff0c;引用都是左值引用。为了弄清楚什么是右值引用&#xff0c;首先…

Euro 2024 足球中的IMU技术突破

在体育技术领域&#xff0c;IMU&#xff08;惯性测量单元&#xff09;技术正以前所未有的方式重塑足球比赛。Adidas Fussballliebe Finale足球&#xff0c;作为首个在欧洲锦标赛中采用公司“连接球技术”的官方比赛用球&#xff0c;展示了IMU技术在现代足球中的应用。以下是这款…