Git基本原理介绍及常用指令

文章目录

  • 前言
  • 一、Git是什么?
    • 集中化的版本控制系统
    • 分布式版本控制系统
  • 二、Git基本概念
  • 三、git命令操作
    • 配置用户信息
    • 常用指令
  • 总结


前言

如果你用Microsoft Word写过论文,那你一定有这样的经历:想删除一个段落,又怕将来想恢复找不回来,怎么办?有办法,先把当前文件“另存为……”一个新 的Word文件,再接着改,改到一定程度,再“另存为……”一个新文件,这样一直改下去,最后你的Word文档变成了这样:
文档
过了一周,你想找回被删除的文字,想保留最新的一个,然后把其他的删掉,又怕哪天会用上,还不敢删。如果有一个软件,不但能自动帮我记录每次文件的改动,还可以让同事协作编辑,这样就不用自己管理一堆类似的文件了,也不需要把文件传来传去。如果想查看某次改动,只需要在软件里瞄一眼就可以,岂不是很方便?
1

版本管理软件可以帮我们完成文件管理。


一、Git是什么?

git
Git究竟是怎样的一个系统?官方解释为一个开源的分布式版本管理工具。

简单理解:Git是管理我们文件的工具,记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。

集中化的版本控制系统

集中

比如 CVS,Subversion 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。

分布式版本控制系统

分布

客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。因为每一次的提取操作,实际上都是一次对代码仓库的完整备份。

工作时不需要联网
更加安全

二、Git基本概念

在Git中文件 有三种状态,文件可能处于其中之一:

  • 已修改(modified) - 已修改表示修改了文件,但还没保存到数据库中。
  • 已暂存(staged) - 已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
  • 已提交(committed) - 已提交表示数据已经安全的保存在本地数据库中。

与文件状态对应的,不同状态的文件在 Git 中处于不同的工作区域:

  • 工作区(Working Directory):你的项目目录(电脑里能看到的目录)。当你 git clone 一个项目到本地,相当于在本地克隆了项目的一个副本。工作区是对项目的某个版本独立提取出来的内容。这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。
  • 暂存区(Staging Area/Index):暂存区是一个文件,保存了下次将提交的文件列表信息,一般在 Git 仓库目录中。有时候也被称作 `‘索引’',不过一般说法还是叫暂存区。
  • 版本库(Repository):存储项目历史记录的地方,存储项目历史记录的地方,可以是本地的,也可以是远程服务器上的。
  • 本地仓库(Remote):本地电脑存储历史记录区域。
  • 远程仓库(Remote):托管在服务器上的代码副本,通常用于团队协作。
    1

三、git命令操作

git软件安装后在桌面不会有快捷图标,我们需要点击右键,从弹出框中选择Git Bash Here命令。
bash
在弹出的命令窗口使用git命令进行操作。

配置用户信息

$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com

常用指令

①git clone :克隆一个已创建的仓库

# 通过 SSH
$ git clone ssh://user@domain.com/repo.git#通过 HTTP
$ git clone http://domain.com/user/repo.git

②git pull <远程主机名> <远程分支名>:<本地分支名>

# 取回origin主机的next分支,与本地的master分支合并
git pull origin next:master# 如果远程分支是与当前分支合并,则冒号后面的部分可以省略。
git pull origin next# 上面的命令实质上等同于先做git fetch,再做git merge。
git fetch origin
git merge origin/next# 合并需要采用rebase模式
git pull --rebase <远程主机名> <远程分支名>:<本地分支名>

③分支的使用:

# 查看本地分支
git branch# 查看远程分支
git branch -r# 创建本地分支(注意新分支创建后不会自动切换为当前分支)
git branch [name]# 切换分支
git checkout [name]# 创建新分支并立即切换到新分支
git checkout -b [name]# 强制删除一个分支
git branch -D [name]# 合并分支(将名称为[name]的分支与当前分支合并)
git merge [name]# 查看各个分支最后提交信息
git br -v# 查看已经被合并到当前分支的分支
git br --merged# 查看尚未被合并到当前分支的分支
git br --no-merged

④git status:显示工作路径下已修改的文件:

⑤git add命令将当前工作区内容存入版本库暂存区

 单独存一个文件        git add index.txt  单独存一个文件夹      git add director/把所有文件存入暂存区   git add .

⑥git commit:暂存区的目录树会写到版本库(对象库)中,master分支会做相应的更新,即master最新指向的目录树就是提交时原暂存区的目录树。

⑦git log:从最新提交开始,显示所有的提交记录(显示hash, 作者信息,提交的标题和时间)

# 显示某个用户的所有提交
$ git log --author="username"

⑧通过git push命令将本地库内容推送到远程库,git pull 命令拉取远程库内容到本地工作区。
流程
⑨git fetch:相当于是从远程获取最新版本到本地,不会自动merge.

git pull:相当于是从远程获取最新版本并merge到本地.
某种意义上git fetch会更安全。

⑩如果你的提交信息 (commit message) 写错了且这次提交 (commit) 还没有推(push), 你可以通过下面的方法来修改提交信息(commit message):

git commit --amend

总结

Git不仅是一个工具,更是一种帮助团队高效协作的方式。掌握Git,可以帮助你更好地管理代码,提高开发效率。

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

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

相关文章

kafka cmd

list topic ./bin/kafka-topics.sh --list --zookeeper 127.0.0.1:2181指定 conf 如果是 ssl 协议指定 指定配置文件 /opt/kafka/bin/kafka-consumer-groups.sh --command-config /opt/kafka/bin/kafka-console-consumer.sh --consumer.config/opt/kafka/bin/kafka-console…

linux:用户管理,增删改

1.查看当前登录的用户信息 [root@bgx ~]# id #查看当前所登陆的用户信息 # uid:用户id,系统只能识别uid,不能识别名字,人看名字 # gid:组id uid=0(root) gid=0(root) groups=0(root) [root@bgx ~]# id oldboy #查看其它用户的信息 uid=1000(oldboy) gid=1000(oldboy) g…

【Linux】2.Linux 指令大揭秘:常见八个指令的妙用(上)

欢迎来到 CILMY23 的博客 &#x1f3c6;本篇主题为&#xff1a;Linux 指令大揭秘&#xff1a;常见八个指令的妙用&#xff08;上&#xff09; &#x1f3c6;个人主页&#xff1a;CILMY23-CSDN博客 &#x1f3c6;系列专栏&#xff1a;Python | C | C语言 | 数据结构与算法 | …

【SpringBoot】参数传递之@ModelAttribute

ModelAttribute标注的方法会在Controller类的每个映射URL的控制执行方法之前执行。 ModelAttribute public void findUserById(PathVariable("userId") Long userId,Model model){ model.addAttribute("user",userService.findUserById(userId)); } GetM…

千万别从系统中创建线程, 看看从线程池中调用的线程的效率(1)

本篇会加入个人的所谓鱼式疯言 ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. &#x1f92d;&#x1f92d;&#x1f92d;可能说的不是那么严谨.但小编初心是能让更多人…

Web3.js 4.x版本事件监听详解:从HTTP到WebSocket的迁移

项目场景 在一个使用以太坊区块链技术的项目中&#xff0c;需要监听智能合约的事件&#xff0c;以便在事件触发时能够及时响应。项目中使用了web3.js库的4.x版本&#xff0c;节点使用Geth启动&#xff0c;并通过HTTP与节点进行通信。 问题描述 合约DataStorage.sol文件已经定…

学习c语言第16天(数据的存储)

一、数据类型的介绍 c语言基本的内置类型 类型的意义&#xff1a; 1.使用这个类型开辟内存空间的大小(大小决定了使用范围) 2.如何看待内存空间的视角 1.类型的基本归类 整形家族 字符的本质是ASCII码值&#xff0c;是整形 int a等于 signed int a char稍微特殊一些…

新书速览|动手学PyTorch建模与应用:从深度学习到大模型

《动手学PyTorch建模与应用&#xff1a;从深度学习到大模型》 本书内容 《动手学PyTorch建模与应用:从深度学习到大模型》是一本从零基础上手深度学习和大模型的PyTorch实战指南。《动手学PyTorch建模与应用:从深度学习到大模型》共11章&#xff0c;第1章主要介绍深度学习的概念…

【检查 Android 设备上的热点(AP)状态】

在这篇教程中,我们将介绍如何使用 adb 命令检查 Android 设备上热点(AP)的状态。我们将通过命令行工具 ifconfig 来判断热点是否启用,并提供一个 Python 脚本示例来自动化这一过程。 前提条件 ADB 环境设置: 确保你已经在计算机上安装并配置好了 ADB (Android Debug Bridg…

【Go - redis client 单例模式】

以下是redis client单例&#xff0c;使用sync.Once保证无论单线程(协程)还是多线程(协程) 只执行一次。 示例 package mainimport ("context""fmt""sync""github.com/redis/go-redis/v9" )var (RedisClientSingleton *redis.Cliento…

深入浅出:Squid技术详解,让你的网络加速与安全无忧

在当今互联网高速发展的时代&#xff0c;网络的稳定性与安全性显得尤为重要。作为一款强大的代理服务器软件&#xff0c;Squid凭借其灵活的配置和强大的功能&#xff0c;成为了众多企业和个人用户的首选。本文将深入探讨Squid的核心技术、应用场景及优化技巧&#xff0c;帮助你…

Python --Pandas库基础方法(2)

文章目录 Pandas 变量类型的转换查看各列数据类型改变数据类型 重置索引删除行索引和切片seriesDataFrame取列按行列索引选择loc与iloc获取 isin()选择query()的使用排序用索引排序使用变量值排序 修改替换变量值对应数值的替换 数据分组基于拆分进行筛选 分组汇总引用自定义函…

Linux 中断的 CPU 亲和性

文章目录 1. 前言2. 背景3. 什么是中断的 CPU 亲和性3. IRQ 中断 默认的 CPU 亲和性4. 硬件架构 CPU 固有 IRQ 中断亲和性5. 中断芯片 各中断 CPU 亲和性 初始化5.1 GIC v2 芯片的 SPI 中断 CPU 亲和性 初始化5.1.1 软件层次: 中断 CPU 亲和性 初始化5.1.2 中断芯片层次: GIC v…

前端面试从基础到资深问题汇总

基础篇 前端基础知识问答-js篇 JavaScript是前端开发的核心语言之一&#xff0c;以下是一些关于JavaScript的基础知识问答&#xff1a; Q: 什么是JavaScript&#xff1f; A: JavaScript是一种高级的、解释型的编程语言&#xff0c;通常用于网页开发中&#xff0c;实现网页的交…

Spring-cloud Alibaba组件--Dubbo

远程调用技术 RestFul风格 基于HTTP协议实现&#xff0c;而HTTP是一种网络传输协议&#xff0c;基于TCP&#xff0c;规定了数据传输的格式。 RPC协议 Remote Produce Call 远程过程调用&#xff0c;类似的还有 RMI &#xff08; remote method invoke&#xff09;。自定义数…

优思学院|抽样检验的概念和21种抽样方式

抽样检验的概念 根据事先制定的抽样方案&#xff0c;从一批产品中随机抽取一部分作为样品&#xff0c;以这部分样品的检验结果&#xff0c;对整批产品质量合格与否作出判定的活动过程&#xff0c;称为抽样检验。除了用于质量控制之外&#xff0c;抽样检验同样适用于在六西格玛…

AI工作流程设计的自动化优化:微软与斯坦福的新成果 - Trace

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

学习网络安全 为什么Linux首择Kali Linux? 以及如何正确的使用Kali Linux

1.什么是kali linux&#xff1f; Kali Linux是一款基于Debian的Linux发行版&#xff0c;主要用于网络安全测试和渗透测试。它由全球顶尖的安全专家和黑客社区维护开发&#xff0c;提供了丰富的工具和资源&#xff0c;用于测试安全性、漏洞利用和渗透测试。此外&#xff0c;Kal…

修复msvcp120.dll丢失的问题的几种简单方法,msvcp120.dll是什么

在使用电脑时&#xff0c;你可能会遭遇一个提示称“msvcp120.dll丢失”的错误信息。这个问题比较普遍&#xff0c;主要是因为你的系统中缺失了某个特定的动态链接库&#xff08;DLL&#xff09;文件。msvcp120.dll是由 Microsoft Visual C 可再发行包提供的关键文件&#xff0c…

一键切换阿里yum源(包括其他系统repo镜像查找方法)

一键切换阿里yum源 示例命令其他系统repo镜像GitHub文档 示例命令 # 备份旧源 mv CentOS-Base.repo CentOS-Base.repo.bak # 添加新源(阿里镜像源) wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo其他系统repo镜像 这里的示例是用…