从快到慢学习Git指令

news2024/9/22 15:31:02

Git是现在最流行的版本控制工具之一。无论是在开源社区还是企业软件开发中,Git都扮演着至关重要的角色。本文将根据不同的需求,分别提供快速上手和深入学习Git的指南。

如果你只想下载代码

如果你只是想下载GitHub或其他代码仓库的代码,那你只需要了解以下两个命令:

  • git clone: 从远程仓库克隆一个本地副本。例如,git clone https://github.com/username/repo.git会将仓库repo克隆到你的本地计算机。
  • git pull: 从远程仓库获取最新的修改并合并到本地。例如,在你克隆的仓库目录下运行git pull,就会将远程的最新修改拉取到本地并自动合并。

如果你需要使用Git进行简单的开发

如果你需要使用Git进行开发,并且你们维护的Git分支较为简单,那你需要了解以下命令以及一些基本的Git管理原则:

a. 你需要了解Git最基本的结构

在这里插入图片描述
workspace:工作区
staging area:暂存区/缓存区
local repository:版本库或本地仓库
remote repository:远程仓库

工作区存放着你电脑本地的代码。暂存区存放着你暂时放到一边的代码(当你暂时不希望你修改的一部分代码出现在你本地的代码中,但是后续可能又会用到的代码,即可使用暂存区先将其存起来)(可以理解为暂存区中的代码已经脱离了你代码原本存放的位置)。本地仓库存放着你已经提交了的代码是远程仓库与你本地代码间的桥梁。远程仓库为存放在服务器上的Git代码仓库,如github上的代码就是存放在github服务器上的,对你本机来说github服务器就是你本地的远程仓库。

b. 你需要简单了解Git的分支结构

你需要知道,Git的主要作用是对代码进行版本管理,其根本目的和作用就是管理你每一次对工程代码的修改,以方便出问题时对之前提交的代码进行分析,并进行回退;并且当你参与团队对一个项目进行开发时,可以保证你们团队成员之间写的代码不会出现冲突(比如你的代码被你伙伴修改了,然后当你/你同伴提交代码时Git就会阻止这种冲突的提交并提示你/你同伴)这样就能保证团队间开发的代码都是各种功能块的这样就保证了团队间能够 有序的进行代码的开发。

c. 你需要记住Git的这些基本指令

  • git init: 初始化一个新的Git仓库。在你的项目目录下运行git init,就会在该目录下创建一个新的Git仓库。
  • git status: 查看当前Git仓库的状态。这个命令会显示哪些文件被修改了,哪些文件还没有被提交。
  • git add: 将文件添加到暂存区。例如,git add file.txt会将file.txt添加到暂存区。
  • git commit: 将暂存区的修改提交到本地仓库。例如,git commit -m "Add new feature"会将暂存区的修改提交,并添加提交信息"Add new feature"。
  • git push: 将本地的修改推送到远程仓库。例如,git push origin main会将本地的main分支推送到远程仓库的main分支。
  • git fetch: 从远程仓库获取最新的修改,但不合并到本地。这个命令可以让你在合并前查看远程的修改。
  • git rebase: 将一个分支的修改合并到当前分支。例如,git rebase main会将当前分支的修改以main分支为基础进行合并。
  • git reset: 撤销修改。例如,git reset --hard HEAD~1会撤销最近一次的提交并删除工作区的改动。
  • git clean: 删除未跟踪的文件。例如,git clean -fd会删除所有未跟踪的文件和目录。
  • git restore: 撤销工作区的修改。例如,git restore file.txt会撤销file.txt在工作区的修改。
  • 你说得对,我漏掉了git revert这个重要的命令。让我来补充一下:
  • git revert: 撤销某次提交引入的改动,但不删除这个提交,而是生成一个新的提交来撤销更改。这个命令通常用于在公共分支上撤销一个已经推送的提交。例如,git revert HEAD会撤销最近一次提交引入的改动。

d. 你还需要了解一些Git管理的基本原则:

  • 提交应该是原子性的: 一次提交应该完成一个完整的改动。这使得代码更容易理解和回退。
  • 总是在提交前拉取: 在提交前运行git fetch and git rebase可以尽量减少合并冲突。
  • 妥善地使用分支: 利用分支可以让你的开发工作与主线开发分开,这可以减少冲突。
  • 写清晰的提交信息: 好的提交信息可以让其他人(包括未来的你)更容易理解这次提交的内容。

如果你需要使用Git进行复杂的开发

如果你们的代码分支较为复杂,你就需要深入学习Git的一些特性。除了上述的命令,你还需要掌握以下命令:

  • git branch: 列出、创建或删除分支。例如,git branch会列出所有的本地分支。
  • git branch [branch_name]: 创建一个新的分支。例如,git branch new-feature会创建一个名为new-feature的新分支。
  • git checkout: 切换分支或恢复工作区文件。例如,git checkout new-feature会切换到new-feature分支。
  • git reset [commit]: 将当前分支的末端移动到指定的提交。例如,git reset HEAD~3会将当前分支的末端移动到前三个提交之前。
  • git diff: 显示两个提交或工作区之间的差异。例如,git diff HEAD~1会显示最近一次提交和上一次提交的差异。
  • git merge [branch_name]: 将指定的分支合并到当前分支。例如,git merge new-feature会将new-feature分支合并到当前分支。
  • git cherry-pick [commit]: 选择一个提交,合并到当前分支。例如,git cherry-pick abc123de会将提交abc123de合并到当前分支。
  • git rebase -i: 交互式地修改提交历史。这可以用来合并提交,修改提交信息,删除提交等。
  • git stash: 将当前工作状态保存起来,以便后续恢复。例如,git stash会保存当前的修改,然后将工作区恢复到上一次提交的状态。
  • git tag: 给某个提交打上标签,通常用于标记发布版本。例如,git tag v1.0会给当前提交打上v1.0的标签。
  • git submodule: 管理项目中的其他Git仓库,常用于引用其他项目的代码。
  • git bisect: 通过二分查找来定位引入Bug的提交。
  • git blame: 查看文件的每一行是由谁修改的。
  • git reflog: 查看操作日志,常用于恢复误删的提交。

除了这些命令,你还需要深入理解Git的一些原理和特性:

  • Git的数据模型: Git本质上是一个内容可寻址的文件系统,并在此基础上提供了版本控制功能。理解Git的数据模型可以帮助你更好地理解Git的操作。
  • 分支模型: Git的分支是轻量级的,创建和切换分支几乎是瞬间完成的。合理地使用分支可以使你的开发工作更有条理。常见的分支模型有Git Flow, GitHub Flow等。
  • 远程仓库: Git是一个分布式的版本控制系统,每个Git仓库都可以有多个远程仓库。了解如何管理远程仓库可以让你更好地与其他人协作。
  • Git钩子: Git提供了在特定事件发生时自动运行脚本的能力,这被称为"钩子"。钩子可以用于自动化测试,部署等任务。

下面是一些例子,展示了如何在实际开发中使用这些知识:

  1. 创建一个新的特性分支并合并到主分支:

    # 在main分支上
    git checkout main
    git pull
    git checkout -b new-feature
    
    # 在new-feature分支上进行开发
    git add .
    git commit -m "Implement new feature"
    
    # 切换回main分支
    git checkout main
    git pull
    
    # 合并new-feature分支
    git merge new-feature
    git push
    
  2. 修复一个Bug并将修复应用到多个分支:

    # 在main分支上
    git checkout main
    git pull
    
    # 创建一个修复Bug的分支
    git checkout -b fix-bug
    
    # 修复Bug并提交
    git add .
    git commit -m "Fix bug"
    
    # 切换到需要修复的分支,例如develop分支
    git checkout develop
    git cherry-pick fix-bug
    git push
    
  3. 使用Git钩子自动运行测试:

    .git/hooks目录下创建一个名为pre-commit的文件,内容如下:

    #!/bin/sh
    
    npm test
    

    给这个文件添加执行权限:

    chmod +x .git/hooks/pre-commit
    

    现在,每次你执行git commit时,都会先自动运行npm test。如果测试失败,提交将被中止。

未完待续。。。

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

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

相关文章

SpringBoot 整合 Elasticsearch 实现商品搜索

一、Spring Data Elasticsearch Spring Data Elasticsearch 简介 Spring Data Elasticsearch是Spring提供的一种以Spring Data风格来操作数据存储的方式,它可以避免编写大量的样板代码。 常用注解 常用注解说明如下: 注解名称 作用 参数说明 Docu…

Python面试宝典第34题:旋转图像

题目 给定一个n n的二维矩阵matrix表示一个图像,请你将图像顺时针旋转90度。 注意:你必须在原地旋转图像。这意味着,你需要直接修改输入的二维矩阵,而不能使用另一个矩阵来旋转图像。 示例 1: 输入:matri…

Spark SQL Catalyst工作流程

我们写的SQL语句,会经过一个优化器 (Catalyst),转化为 RDD,交给集群执行。 而Catalyst在整个Spark 生态中的地位也是至关重要的。 SQL到RDD中间经过了一个Catalyst,它就是Spark SQL的核心,是针对Spark SQL语句执行过程…

【计算机网络】LVS四层负载均衡器

https://mobian.blog.csdn.net/article/details/141093263 https://blog.csdn.net/weixin_42175752/article/details/139966198 《高并发的哲学原理》 (基本来自本书) 《亿级流量系统架构设计与实战》 LVS 章文嵩博士创造 LVS(IPVS) 章⽂嵩发…

Agile Modbus移植教程--基于GD32F103C8T6+RT-Thread+mdk5

主机移植 0.下载源码 开源地址:GitHub - loogg/agile_modbus 1.复制源码 1.2、目录结构 名称说明doc文档examples例子参考示例figures素材inc头文件移植需要src源代码移植需要util提供简单实用的组件移植需要 本次移植需要的有 参考demo 头文件 源码 从机辅助文件 2.添…

【中等】 猿人学web第一届 第5题 js混淆-乱码增强

请求流程 打开 调试工具,查看数据接口 https://match.yuanrenxue.cn/api/match/5 请求参数 请求参数携带了 page, m, f 3个字段, page为页数, m 为时间戳 像是 new Date().getTIme() 生成的 f 为时间戳 像是 Date.parse(new Date()) 生成的 …

Spring boot敏感参数加密配置

一,背景 在项目中很多参数会被配置到配置文件中,比如说密钥,用户名,数据库连接,账号密码之类的,如果用明文配置,会有一定的安全风险。为了减小风险,增加对敏感配置数据的加密配置。…

Gerrit 使用教程

一、Gerrit简介 Gerrit,一种开放源代码的代码审查软件,使用网页界面。利用网页浏览器,同一个团队的程序员,可以相互审阅彼此修改后的代码,决定是否能够提交,退回或是继续修改。它使用版本控制系统Git作为底…

LabVIEW光伏微网实验系统

开发了一个基于LabVIEW的光伏微网实验系统,系统主要服务于工程教育和技术研究,以提高学生对分布式电力系统的理解和操作能力。该实验系统能够模拟光伏微网的各种运行状态,包括能量的生成、存储和消费等,特别是在无电网状态下的独立…

Datawhale AI夏令营-大模型技术(微调)Task2打卡

1 输出结果要求 input:阅读文章本体与完成QAG的prompt target:题干、题目选项及答案 2 数据处理 2.1 Python 正则表达式 需要将文件中的数据读取出来,将语文数据与英语数据整理好后存储成可以微调的数据格式(csv与jsonl类型&a…

el-checkbox 状态不更新

文章目录 数据处理代码片段 🌰 大概举例原因解决方法 - 深拷贝forceUpdate - 强制更新 今天遇到了checkbox不更新的问题,相同的功能在其他地方正常使用,有些地方不能用。数据处理代码片段 🌰 大概举例 从现有数据中过滤出新的数据…

MySQL学习[4] ——MySQL锁

四、MySQL锁 4.1 MySQL有哪些锁? 4.1.1 全局锁 全局锁就是**对整个数据库实例加锁,主要用于全库逻辑备份**等场景。 flush tables with read lock # 加全局锁unlock tables # 解锁加上全局(读)锁后,整个数据库都…

网络安全-第二阶段-linux操作系统01

一. linux介绍: windows,mac,linux都是由unix系统发展而来。 linux:类unix系统; 二. Centos系统的安装: 可以去清华大学开源软件镜像站下载: 输入ip addr: 可以看到自己电脑的ip地址; 1. ssh远程连接linux: 使用windows或者linux的物理机或者虚拟机都可以连接上它,…

MPU6050+OLED读取姿态角(超级细讲)

STM32F103C8T6读取陀螺仪MPU6050的角度数据,使用6050自带DMP库姿态解算出各个方向的角度,并使用OLED实时刷新显示,同时可以将数据通过串口发送到计算机,每一组数据50ms。本操作过程简单,方便移植,显示屏接P…

ppt中添加页码(幻灯片编号)及问题解决方案

在幻灯片母版中,选择插入 幻灯片编号 右下角显示幻灯片编号 问题一:母版中没有显示编号 原因可能是母版版式中没有设置显示,勾选即可。 问题二:子母版中没有显示幻灯片 将母版中的编号复制到子母版中。 问题三:应用…

Element-UI自学实践

概述 Element-UI 是由饿了么前端团队推出的一款基于 Vue.js 2.0 的桌面端 UI 组件库。它为开发者提供了一套完整、易用、美观的组件解决方案,极大地提升了前端开发的效率和质量。本文为自学实践记录,详细内容见 📚 ElementUI官网 1. 基础组…

2024年7月文章一览

2024年7月编程人总共更新了5篇文章: 1.2024年6月文章一览 2.《Programming from the Ground Up》阅读笔记:p19-p48 3.《Programming from the Ground Up》阅读笔记:p49-p74 4.《Programming from the Ground Up》阅读笔记:p75…

深入理解Kafka核心设计与实践原理_03

深入理解Kafka核心设计与实践原理_03 03_消费者3.1消费者与消费者组3.2客户端开发3.2.1 必要的参数配置3.2.2 订阅主题与分区 草稿 03_消费者 与生产者对应的是消费者,应用程序可以通过KafkaConsumer来订阅主题,并从订阅的主题中拉取消息。不过在使用Ka…

Redis17-服务端优化

目录 持久化配置 慢查询 什么是慢查询 如何查看慢查询 命令及安全配置 内存配置 集群优化 持久化配置 Redis的持久化虽然可以保证数据安全,但也会带来很多额外的开销,因此持久化请遵循下列建议: 用来做缓存的Redis实例尽量不要开启持…

springboot项目打包jar 并打包为exe启动

springboot项目打包jar 并打包为exe启动(在无jdk环境下运行) 环境 SpringBoot Windows IDEA 实现 1.springboot打包为可执行jar(这里使用maven install) maven工具栏选择项目->Plugins ->install 注:如果…