深入理解 Git 一个开发者的必备工具

news2024/11/28 12:55:31

深入理解 Git 一个开发者的必备工具

  1. 演示地址 演示地址
  2. 获取更多 获取更多
  • 在现代软件开发中,版本控制系统扮演着至关重要的角色。其中,Git 是最流行的选择之一。无论你是新手还是有经验的开发者,了解 Git 的基本概念和使用方法都能大大提升你的工作效率。

什么是 Git?

  • Git 是一个分布式版本控制系统,旨在高效地处理从小型到大型的项目。与传统的版本控制系统不同,Git 允许每个开发者在本地拥有一个完整的版本库,这使得协作和分支管理变得更加灵活。

git 工作流

  • 首先我们的了解 Git 通常的操作流程,网上流行的不错一张图
    alt text

  • 工作区:
    本地项目存放文件的位置,可以理解成图上的 workspace

  • 暂存区 (Index/Stage):
    顾名思义就是暂时存放文件的地方,通过是通过 add 命令将工作区的文件添加到缓冲区

  • 本地仓库(Repository)
    通常情况下,我们使用 commit 命令可以将暂存区的文件添加到本地仓库,通常而言,HEAD 指针指向的就是 master 分支

  • 远程仓库(Remote)

举个例子,当我们使用 GitHub 托管我们项目时,它就是一个远程仓库。通常我们使用 clone 命令将远程仓库代码拷贝下来,本地代码更新后,通过 push 托送给远程仓库。

Git 安装指南

  1. Windows
  • 下载: 前往 Git for Windows 网站,下载最新的安装程序。
  • 安装: 运行下载的安装程序,按照向导进行操作。推荐使用默认选项。
  • 验证安装: 打开命令提示符(cmd)或 PowerShell,输入以下命令:
git --version
  1. macOS
  • 使用 Homebrew: 如果你已安装 Homebrew,可以通过以下命令安装 Git:
brew install git
  • 验证安装: 打开终端,输入:
git --version
  1. Linux
  • Debian/Ubuntu:
sudo apt update
sudo apt install git
  • CentOS/Fedora:
sudo dnf install git  # Fedora
sudo yum install git  # CentOS
  • 验证安装: 打开终端,输入:
git --version
  1. 如用户名和邮箱:
git config --global user.name "你的名字"
git config --global user.email "你的邮箱"

git 常用命令

  1. 创建新仓库
git init
  1. 克隆远程仓库
git clone 仓库地址
  1. 查看当前状态
git status
  1. 查看变更(未暂存和已暂存):
git diff           # 未暂存的变更
git diff --cached  # 已暂存的变更
  1. 添加文件到暂存区
git add 文件名
git add .          # 添加所有变更
  1. 提交变更
git commit -m "提交信息"
  1. 查看所有分支
git branch
  1. 创建新分支
git branch 新分支名
  1. 切换分支
git checkout 分支名
  1. 切换分支
git merge 分支名
  1. 删除分支
git branch -d 分支名
  1. 添加远程仓库
git remote add origin 仓库地址
  1. 推送到远程仓库
git push origin 分支名
  1. 拉取远程变更
git pull
  1. 查看提交历史
git log
  1. 查看简洁历史
git log --oneline
  1. 重置当前分支的 HEAD 到某个提交
git reset --hard 提交哈希
  1. 解决合并冲突后继续合并
git merge --continue

git 高级命令

  1. 交互式暂存
  • 使用 git add -p,你可以逐块选择需要暂存的改动,使提交更精确
git add -p
  1. 创建标签
git tag -a 标签名 -m "说明"
  1. 查看标签
git tag
  1. 删除标签
git tag -d 标签名

last

  1. 交互式暂存
  • 使用 git add -p,你可以逐块选择需要暂存的改动,使提交更精确
git add -p
  1. 创建标签
git tag -a 标签名 -m "说明"
  1. 查看标签
git tag
  1. 删除标签
git tag -d 标签名
  1. 推送标签到远程
git push origin 标签名
  1. 推送标签到远程
git push origin 标签名
  1. 修补提交
  • 如果你需要修改最近的提交,可以使用
git commit --amend
  1. 查看具体提交的更改
git show 提交哈希
  1. 图形化查看提交历史
git log --graph --oneline --decorate --all
  1. 查找文件的历史
git log -- 文件名
  1. 解决冲突
  • 在合并或变基时发生冲突后,解决冲突后继续操作:
git add 解决的文件
git rebase --continue  # 或者 git merge --continue
  1. 添加子模块
  • 子模块可以管理依赖于其他 Git 仓库的项目
git submodule add 仓库地址
  1. 初始化和更新子模块
git submodule init
git submodule update
  1. Cherry-Pick
  • Cherry-pick 允许你从其他分支选择特定的提交
git cherry-pick 提交哈希
  1. 撤销未暂存的更改
git checkout -- 文件名
  1. 撤销已暂存的更改
git reset HEAD 文件名
  1. 查看某个文件在不同版本之间的差异
git diff 提交哈希1 提交哈希2 -- 文件名
  1. 查看远程信息
git remote -v
  1. 添加远程仓库
git remote add origin 仓库地址
  1. 推送到远程仓库
git push origin 分支名
  1. 推送所有分支到远程
git push --all origin
  1. 版本回滚
git revert 提交哈希

分支命名规范

分支命名规范

忽略文件 .gitignore

  • 这个文件的作用,会去忽略一些不需要纳入 Git 管理这种,我们也不希望出现在未跟踪文件列表,那么我们来看看如何配置该文件信息。
# 此行为注释 会被Git忽略

# 忽略 node_modules/ 目录下所有的文件
node_modules


# 忽略所有.vscode结尾的文件
.vscode

# 忽略所有.md结尾的文件
*.md

# 但README.md 除外
!README.md

# 会忽略 doc/something.txt 但不会忽略doc/images/arch.txt
doc/*.txt

# 忽略 doc/ 目录下所有扩展名为txt文件

doc/**/*.txt

联系我们

  1. 关注我们
  1. 联系作者

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

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

相关文章

YOLO v11实时目标检测3:训练数据集格式说明

一、Yolov11简介 YOLOv11 是 YOLO 系列的最新版本,它不仅在目标检测方面表现出色,还引入了对象分割和多目标跟踪的功能。本文将介绍如何使用 YOLOv11 进行人流统计、车流统计以及跟踪的实际应用。 二、Yolo v11训练数据集格式说明 2.1 数据组织&#…

SAT分离轴定理的c++/python实现

分离轴定理的c/python实现 现在要对BEV模型检查出来的车辆做NMS,把3d框的平面属性获取到后,配合旋转角度投影到地面就是2D图形。 开始碰撞检测,判断是否重叠,保留置信度高的框就行。 原理 分离轴定理(Separating A…

(C语言贪吃蛇)11.贪吃蛇方向移动和刷新界面一起实现面临的问题

目录 前言 实现效果 支持方向变换 修改默认效果 如何修改 总结 前言 我们上节实现了不需要按下右键就可以是贪吃蛇自发的向右移动,本节我们主要来解决贪吃蛇方向移动和刷新界面所遇到的问题。 实现效果 上图是我们希望实现的效果,我们可以自发地控…

Go 进阶:Go + gin 极速搭建 EcommerceSys 电商系统

Go 进阶:Go + gin 极速搭建 EcommerceSys 电商系统 前言 本章节适合有一定基础的 Golang 初学者,通过简单的项目实践来加深对 Golang 的基本语法和 Web 开发的理解。 具体请联系作者 项目结构 项目流程图 技术栈 项目结构 项目路由 4. 项目模型 项目初始化 初始化项目文…

归并排序【C语言版-笔记】

目录 一、概念二、排序流程理解三、代码实现3.1主调函数3.2 merge函数 四、性能分析 一、概念 归并是一种算法思想,是将两个或两个一上的有序表合并成一个长度较大的有序表。若一开始无序表中有n个元素,可以把n个元素看作n个有序表,把它们两…

Java中数据转换以及字符串的“+”操作

隐式转换(自动类型转换) 较小范围的数据类型转成较大范围的数据类型 强制转换(显式转换) 将数据范围大的数据类型转换为数据范围小的数据类型 基本数据类型之间的转换 当需要将一个较大的数据类型(如float或double…

Linux:进程控制(一)

目录 一、写时拷贝 1.创建子进程 2.写时拷贝 二、进程终止 1.函数返回值 2.错误码 3.异常退出 4.exit 5._exit 一、写时拷贝 父子进程,代码共享,不作写入操作时,数据也是共享的,当任意一方试图写入,便通过写时拷…

影刀RPA实战:excel相关图片操作指令解

1.实战目标 excel是工作中必不缺少的工具,今天我们继续使用影刀RPA来实现excel操作的便利性,让影刀自动化来帮我们完成工作。 2.单元格填充图片 2.1 指令说明 功能:向 Excel 单元格插入本地图片或网络图片,支持Office和WPS&…

波阻抗,是电场矢量的模值/磁场矢量的模值

波阻抗是电场复振幅除以磁场复振幅,最后只与介质με有关 所以磁场可用电场强度表示(利用波阻抗) 问题,复振幅是矢量,波阻抗的定义是复振幅的比值?答案:不是,很明显,波阻…

Web3 游戏周报(9.22 - 9.28)

回顾上周的区块链游戏概况,查看 Footprint Analytics 与 ABGA 最新发布的数据报告。 【9.22-9.28】Web3 游戏行业动态: Axie Infinity 将 Fortune Slips 的冷却时间缩短至 24 小时,从而提高玩家的收入。 Web3 游戏开发商 Darkbright Studios…

Pikachu-Sql Inject-搜索型注入

MySQL的搜索语句: select * from table where column like %text%; 如:使用引号闭合左边的引号, or 11 把所有数据查询出来; # 注释掉后面的 引号等; test or 11# 查询出结果: 注入的核心点…

Cloneable接口(浅拷贝和深拷贝的区别)

前言 Object类中存在这一个clone方法,调用这个方法可以创建一个对象的“拷贝”。但是想要合法调用clone方法,必须要先实现Clonable接口,否则就会抛出CloneNotSupportedException异常。 1 Cloneable接口 //Cloneable接口声明 public interf…

CentOS 7文件系统

从centos7开始,默认的文件系统从ext4变成了XFS。随着虚拟化的应用越来越广泛,作为虚拟化磁盘来源的大文件(单个文件几GB级别)越来越常见。 1.XFS组成部分: XFS文件系统在数据的分布上主要划分为三部分:数据…

QT篇:QT介绍

一.QT概述 Qt 是一个跨平台的应用程序和用户界面框架,用于开发图形用户界面(GUI)应用程序以及命令行工 具。它最初由挪威的 Trolltech (奇趣科技)公司开发,现在由 Qt Company 维护,2020年12月8…

如何在网格中模拟腐烂扩散:如何使用广度优先搜索(BFS)解题

问题描述 你需要在一个二维的网格中处理橘子的腐烂扩散过程,网格中的每个单元格可以有三种状态: 0:表示空格,没有橘子。1:表示一个新鲜的橘子。2:表示一个腐烂的橘子,它可以在 1 分钟内让上下…

模拟算法(1)_替换所有的问号

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 模拟算法(1)_替换所有的问号 收录于专栏【经典算法练习】 本专栏旨在分享学习算法的一点学习笔记,欢迎大家在评论区交流讨论💌 目录 1. …

MHA携手Atlas:打造高效读写分离解决方案,引领数据库性能飞跃

作者简介:我是团团儿,是一名专注于云计算领域的专业创作者,感谢大家的关注 座右铭: 云端筑梦,数据为翼,探索无限可能,引领云计算新纪元 个人主页:团儿.-CSDN博客 目录 前言&#…

npm切换到淘宝镜像

1、输入以下命令后回车,npm切换至淘宝镜像 npm config set registry https://registry.npmmirror.com 2、输入以下命令后回车,检查是否切换成功 npm config get registry 若返回此信息,表示切换成功 3、切换后就可使用淘宝镜像加快npm包的…

C语言 | Leetcode C语言题解之第447题回旋镖的数量

题目: 题解: int cmpfunc(const void *a, const void *b) {return (*(int *)a - *(int *)b); } //计算组合数*2 int every(int count) {if (count 1) {return 0;} else {return count * (count - 1);} } //计算每个锚点能产生的回旋镖总数 int part(in…

【嵌入式系统】第18章 脉宽调试器(PWM)

目录 18.1 结构框图 18.3 功能说明 18.3.4 PWM 信号发生器 18.3.5 死区发生器 18.3.6 中断/ADC 触发选择器 18.3.7 同步方法 18.3.8 故障条件 18.3.9 输出控制块 LES 硬件介绍(12)正交编码接口QEI 19.1 结构框图 19.2 信号描述 19.3 功能说明…