【git版本控制】| git版本控制操作命令(全)

news2024/9/20 21:26:52

文章目录

    • 一、简介
    • 二、工作模式
      • 1 集中式(CVS、SVN)
      • 2 分布式Git
    • 三、Git
      • 1 工作模式
      • 2 git工作流程
      • 3 工作区和版本库
      • 4 注意事项
      • 5 基本操作
        • 5.1 创建本地版本库
        • 5.2 初始化本地版本库
        • 5.3 .git目录的作用
        • 5.4 创建用户
        • 5.5 其他操作
      • 6 git分支
      • 7 常见警告
      • 8 免密登录
      • 9 远程库使用
      • 10 标签

一、简介

二、工作模式

1 集中式(CVS、SVN)

  • 为了让不同系统上的开发者能够协同工作。有一个单一的集中管理的服务器,保存所有的修订版本。而协同工作的人们都得通过客户端连接到这台服务器,获取最新的文件或者提交更新;

存在的问题

  • 服务器出现问题,客户机无法更新到最新版本;
  • 需要网络环境,单机无法实现版本控制;
  • 客户机无法直接进行联系;

2 分布式Git

  • 每台客户机都有独立的版本控制功能, 多台客户机相连即可文件共享版本管理

优点

  • 无需网络环境也可进行版本控制,在网络下可实现协同工作

三、Git

1 工作模式

  • 集中式工作模式:便于客户机协同工作,设置一个中央版本库服务器,让索引客户机都从该主机更新版本,提交最新版本;
  • 开源社区工作模式:对于不同的客户机对中央版本库具有不同的操作权限,有利于维护开源软件的安全性;

2 git工作流程

  • 初始化:初始化一个本地版本库,每个版本库仅需要执行一次即可;
  • 克隆:将中央版本库内容克隆到本地版本库,每个客户机仅需要执行一次
  • 添加:添加指定文件到版本控制管理(只是添加到暂存区);
  • 提交:将修改操作操作到本地版本库(将暂存区的内容提交到本地版本库);
  • 推送:将本地版本库中的修改内容推送到中央版本库,客户机需要在一阶段性工作完成之后或在某些时间点将修改过的内容备份到中央版本库,方便他人更新;
  • 拉取:将中央版本库中变化的内容拉取本地版本库,客户机需要不时的更新才可获取最新内容;

3 工作区和版本库

git存在工作区版本库,版本库有暂存区分支区
在这里插入图片描述
工作区:存放用户可编辑的文件本身;
暂存区:存放文件的快照;
分支区:可包含很多分支,每个分支记录当前工作区中文件的状态快照;

4 注意事项

  • 版本控制只能控制文本文件,对二进制文件无法控制;
  • 编码建议使用UTF-8

5 基本操作

5.1 创建本地版本库

  • 一个本地版本库对应一个项目,即一个目录,里面所有文件都被git管理;

5.2 初始化本地版本库

  • 进入本地版本库目录;
  • git init

5.3 .git目录的作用

  • 包含当前版本库正常工作需要的所有内容:暂存区文件版本记录文件配置文件等;

5.4 创建用户

  • 每台客户机对版本库的所有提交操作都需要注明操作者的身份,所有需要创建用户:用户名和email;

三种不同创建方式,产生三种不同作用域的用户,信息会写到三个不同配置文件中

  • 系统用户:当前主机系统所有用户均可使用的git用户;
  • 全局用户:当前主机系统的当前登录用户可以使用git用户;
  • 本地库用户:只能对当前的本地版本库进行提交的git用户;
  • 在多种用户下,会默认以小范围用户操作git;

系统用户

  • 可在任意目录下运行创建命令;
  • git config --system user.name "xxx"
  • git config --system user.email "xxx.com"
  • 查看git config --system --list

全局用户

  • 该命令可在任意目录下运行;
  • git config --global user.name "xxx"
  • git config --global user.email "xxx.com"

本地库用户

  • 只能在当前本地库目录下运行;
  • git config user.name "xxx"
  • git config user.email "xxx.com"

5.5 其他操作

查看状态git status

添加文件到暂存区

  • 添加指定文件:git add file
  • 添加多个文件:git add file1 file2...;【可使用通配符】

提交:从暂存区永久写入本地仓库:git commit -m "msg"

忽略文件:只需要在工作区创建一个.gitignore,将要忽略的文件名写入,并将.gitignore提交到本地版本库即可;

查看区别

  • 比较工作区与暂存区:git diff file
  • 比较暂存区与本地版本库:git diff --cached file

翻页与退出git log信息太多;

  • 回车:下一行;
  • 空格:下一页;
  • q:退出git log;

查看历史版本信息:id是通过IP、版本库、提交者、提交时间计算的值、作者信息、时间、空行、提交的信息

  • 查看历史版本:git log
  • 查看简单的日志:git log --pretty=online
  • 简介id方式显示:git log --pretty=online -abbrev-commit
  • 只能查看历史版本到当前HEAD的信息;

查看可引用历史版本:避免版本回退出现问题;

  • 能查看所有历史版本信息:git reflog

HEAD指针:git会默认创建主分支,而HEAD指向当前刚刚提交的版本时间节点;

  • ^:表示当前版本的前一个版本,以数量计算;HEAD^
  • ~num:表示当前版本之前的第几个版本;

撤销修改

  • 工作区修改,未添加到暂存区:git checkout -- file
  • 修改已添加到暂存区,为提交到本地版本库:git reset HEAD file
  • 提交到了本地版本库,无法撤销,但可回退版本:git reset
    • git reset --soft HEAD^:回退到当前版本的前一个版本,但仅修改分支中的HEAD指针的位置,不会改变工作区与暂存区中的文件的版本,状态变为未提交的状态;
    • git reset --mixed id:回退到指定版本,修改了分支中HEAD指针的位置并将暂存区中数据也回退到指定版本,但工作区不变;
    • git reset --hard id:回退到指定版本,修改分支中HEAD指针的位置并回退了工作区、暂存区、本地库;

删除文件:需要明确文件的状态;

  • 若为被管理:可直接删除;
  • 仅删除暂存区中指定文件:git rm --cached
  • 完全删除:git rm,三个区都删除;

查看暂存区列表git ls-files

查看本地库文件列表git ls-files --with-tree=HEAD;即主分支上当前HEAD指针所指向的时间点的文件列表,HEAD^即上一版本;

恢复被删除文件

  • git reset HEAD 文件名恢复在暂存区中的文件;

6 git分支

  • git主干:上每一个节点就是一个版本,即一次commit提交,且可以有多个指针(分支);
  • git分支:一个指针的移动轨迹即为一个分支,分支可任意切换,切换后均可进行各自的提交;;
  • HEAD:当前分支当前最新版本,分支的切换即修改HEAD指针;

在这里插入图片描述
分支合并

  • 将dev分支的工作合并到主分支上;即将master指针指向dev指针指向的节点,再将HEAD指针指向master指针指向的节点即可,即修改两个指针的指向;
    在这里插入图片描述

合并后的删除

  • 合并后dev分支的文件版本低于master分支上该文件的版本,合并后的dev即无用,故一般将其删除;

创建并切换分支git checkout -b 分支名称

  • 创建分支:git branch 分支名
  • 切换分支:git checkout 分支名

查看系统的分支git branch

删除分支git branch -d 分支名,需要切换到其他分支才能删除;

合并分支git merge 分支名

  • 若将B合并到A,需要将当前分支切换到A上,在合并git merge B

分支合并冲突

  • git:当不同分支对同一个文件进修改后进行合并就会产生冲突;
  • svn:只有不同分支修改的是同一文件同一行同一列才会冲突;
  • 当失败是,会给出失败的状态,可通过查看文件查看冲突内容分割线(====),合并的内容(<<<<<<<<< >>>>>>>>);
  • 手动修改内容,在提交即可;
  • 【注意】:master中为合并后的版本,而dev为合并前的版本,一般会将其删除;

查看合并记录

  • git log --graph可看出合并冲突;

7 常见警告

LF被CRLF替换警告:LF是Linux下换行符,CRLF是window下换行符;

8 免密登录

简介

  • Git主机的通信采用SSH协议;该协议包含公钥和私钥;
  • 公钥私钥是一对,使用公钥加密,只能使用私钥进行解密;

生成步骤
在这里插入图片描述

  • Master生成密钥,保存在本地;
  • 在将Master公钥及用户名密码发生给Slave,并将公钥用户信息保存到本地即可;

验证

  • Master向Slave发生连接请求,包含Master用户信息;
  • Slave从本地文件中查找是否存在连接中包含的用户信息,若不存在,则拒绝,则存在,则访问;
  • Master将加密后的附页字符串使用私钥进行解密;
  • Master将解密后的字符串发生给Slave;
  • Slave将接收到的字符串与本地为加密的字符串进行比较,相同则可访问;

》》》》》》》》免密登录参考连链接《《《《《《《《

9 远程库使用

创建

git remote add origin git@github.com/xxxx	# 为指定一个远程版本库命名一个本地名称(origin)
git push -u origin master					# 推送master分支
# -u 指定默认的远程库
git push # 将本地版本库中当前分支推送到默认远程库
git push origin  # 将本地版本库中当前分支推送到origin远程版本库
git push origin master 	# 将本地版本库中master分支推送到origin远程库

克隆到本地库

  • 创建本地库存储目录:不需要创建项目目录;
  • 复制远程库地址:
  • 运行克隆命令:

pull到本地库

git pull origin master # 将远程库origin的master分支拉取到本地库与本库的master分支合并;
git pull origin master:dev # 将远程库origin的master分支拉取到本地并与本地dev的分支合并;
git pull	# 从默认远程库拉取与本地库当前分支合并;

查看本地的远程库信息
git remote:列举当前本地版本库可操作的远程版本库名称;-v

删除本地的远程库信息
git remove rm 远程库名称

10 标签

标签是与commit id绑定的名称,一旦绑定就不能修改;

定义

  • 轻量标签git tag 标签名 commit-id,若给历史版本指定标签,则要加ID;
  • 附注标签git tag -a 标签名 -m "附注说明" commit-id

查看

  • 查看当前系统下的所有标签git tag
  • 查看指定标签的详情git show 标签名称

修改

  • 若需要修改代码则需要重新创建一个分支,修改后再合并到master分支;在将该分支删除,合并到mster分支后,仍需要删除原标签,在与新的commit-id绑定;
  • 一旦标签定义完成后就不会与删除再绑定了,而是会再定义一个新的标签与新的commit-id绑定;

推送


git push origin 标签名	# 推送单个标签
git push origin-tags # 推送所有为推送的标签到远程库

删除

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

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

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

相关文章

interface接口--GO面向对象编程思想

一、interface接口 interface 是GO语言的基础特性之一。可以理解为一种类型的规范或者约定。它跟java&#xff0c;C# 不太一样&#xff0c;不需要显示说明实现了某个接口&#xff0c;它没有继承或子类或“implements”关键字&#xff0c;只是通过约定的形式&#xff0c;隐式的…

【C语言进阶】自定义类型:结构体,枚举,联合体

目录 1、结构体的声明 1.1 结构体基础知识 1.2 结构体的声明 1.3 特殊的声明 1.4 结构体的自引用 1.5 结构体变量的定义和初始化 1.6 结构体内存对齐 ​编辑1.7 修改默认对齐数 1.8 结构体传参 2. 位段 2.1 什么是位段 2.2 位段的内存分配 2.3 位段的跨平台问…

【owt-server】代码结构及新增一个agent

owt server 官方 5.0 仓库:代码结构 manage console manage api portal sip portal 与agent 并列 agent又有很多种类。 启动脚本 启动一个新的agent 比如streaming-agent streaming-agent )cd ${OWT_HOME}/s

分布式id

分布式id一 什么是分布式系统唯一ID二 分布式系统唯一ID的特点三 分布式系统唯一ID的实现方案3.1 基于UUID3.2 基于数据库自增id3.3 基于数据库集群模式3.4 基于Redis模式3.5 基于雪花算法&#xff08;Snowflake&#xff09;模式3.6 百度&#xff08;uid-generator&#xff09;…

Python爬虫数据到sqlite实例

参考链接:https://blog.csdn.net/qq_45775027/article/details/115319253最近需要使用到爬虫数据库&#xff0c;原文中作者有些没补齐&#xff0c;略作修改之后跑通了。主要修改&#xff1a;1.调整了数据获取的正则表达式&#xff1b;2. 改了一下数据库的table名和定义名字&…

基于Java+SpringBoot+vue+element实现前后端分离牙科诊所管理系统详细设计

基于JavaSpringBootvueelement实现前后端分离牙科诊所管理系统详细设计 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 欢迎点赞 收藏 ⭐留言 文末获取源码联系方式 文章目…

【Linux】虚拟地址空间 --- 虚拟地址、空间布局、内存描述符、写时拷贝、页表…

该吃吃&#xff0c;该喝喝&#xff0c;遇事儿别往心上隔&#x1f60e; 文章目录一、虚拟地址空间1.虚拟地址的引出&#xff08;看不到物理地址&#xff0c;只能看看虚拟地址喽&#xff09;2.虚拟地址空间布局&#xff08;五个段&#xff09;3.感性理解一下虚拟地址空间&#xf…

【C++修炼之路】C++入门(上)

&#x1f451;作者主页&#xff1a;进击的安度因 &#x1f3e0;学习社区&#xff1a;进击的安度因&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;C修炼之路 文章目录一、前言二、第一个 C 程序三、C 关键字(C98)四、命名空间1、命名空间的定义2、命名空间…

C++ Prime课后习题第一章编程

编程一个C程序&#xff0c;它显示您的姓名和地址。#include <iostream>int stonetolb(int); int main() {using namespace std;cout << "zzz ";cout << "闵行"<<endl;return 0; }编写一个程序&#xff0c;要求用户输入一个以long…

3台机器配置hadoop集群_Hadoop+Hbase 分布式集群架构

安装搭建Hadoop1、 配置说明本次集群搭建共三台机器&#xff0c;具体说明下&#xff1a;主机名IP说明nn01192.168.1.51DataNode、NodeManager、ResourceManager、NameNodedn01192.168.1.52DataNode、NodeManager、SecondaryNameNodedn02192.168.1.53DataNode、NodeManager2 、安…

基于浏览器的 PDF 编辑器:RAD PDF for ASP.NET

版本 3.34 改进的 PDF 收藏/投资组合支持和服务器 API 改进 Ω578867473功能更新 为更基本的 PDF 文件损坏/语法错误添加了更正添加了 PdfButtonField.NamedAction 属性添加了 PdfButtonField.IsNamedAction 属性添加 PdfButtonField() 构造函数 - PdfButtonFields 可以由服…

unity-常用组件实操案例

文章目录transform摄像机cameraskybox相机权重&#xff08;depth&#xff09;Audio sourcevideo playertransform 不但控制着组件的旋转、位置、缩放并且还控制着组件间的父子关系 using System; using System.Collections; using System.Collections.Generic; using UnityEn…

不锈钢企业如何利用APS排程软件提升管理效益?

保温杯一般是由陶瓷或不锈钢加上真空层做成的盛水容器&#xff0c;顶部有盖&#xff0c;密封严实&#xff0c;真空绝热层能使装在内部的水等液体延缓散热&#xff0c;以达到保温的目的。保温杯从保温瓶发展而来的&#xff0c;保温原理与保温瓶一样&#xff0c;只是人们为了方便…

Collection

面向对象语言对事物的体现都是以对象的形式&#xff0c;所以为了方便对多个对象的操作&#xff0c;就对对象进行存储&#xff0c;集合就是存储对象最常用的一种方式 数组和集合的不同&#xff1a; 数组长度是固定的&#xff1b;集合长度是可变的。 数组中可以存储基本数据类…

C#在控制台中打印进度条【同步和异步】

使用控制台打印进度条的简单方法。 有现成的IProgress接口进行操作&#xff1a; 实例&#xff1a; var prog new Progress<double>((theV > {Console.WriteLine($"Now the Progress&#xff1a;" COUNT / 10.0 * 100 "%" new string(#, COUN…

社科院与杜兰大学金融管理硕士---授人以鱼不如授人以渔,培养全新金融人才

古人云&#xff1a;“授人以鱼&#xff0c;三餐之需&#xff1b;授人以渔&#xff0c;终身之用”。都说职场入战场&#xff0c;一入职场就如履薄冰。走的每一步可能都影响着自己的职业生涯。在职场无烟的战争中&#xff0c;会慢慢发现差距一点点的被拉开了。金融是现代经济的血…

开发工具(二)基于Source Insight与Samba共享在windows中开发Linux工程

layout: post title: 开发工具&#xff08;二&#xff09;基于Source Insight与Samba共享在windows中开发Linux工程 description: 开发工具&#xff08;二&#xff09;基于Source Insight与Samba共享在windows中开发Linux工程 tag: 开发工具 文章目录资源共享流程说明Source In…

2023,让RFID固定资产管理系统助力企业降本增效

随着企业规模的不断扩大&#xff0c;企业的固定资产管理成为一个关键的问题。因为面临这不断增多的员工、固定资产种类和固定资产数量&#xff0c;企业管理者开始慢慢重视固定资产的管理&#xff0c;纷纷采取不同的方法加强对固定资产的管理。由于管理方法的不同&#xff0c;其…

C++ 智能指针 : auto_ptr 、unique_ptr、 shared_ptr、 weak_ptr

1、智能指针设计初衷&#xff1a; 智能指针实际是类&#xff0c;超过类的作用域后&#xff0c;析构函数会自动回收资源&#xff0c;为程序员管理申请的堆内存&#xff0c;避免内存泄漏 2、C 智能指针种类&#xff1a; auto_ptr &#xff08;C98 的⽅案&#xff0c;C11 已抛…

5G NR标准: 第17章 LTE/NR互通和共存

第17章 LTE/NR互通和共存 新一代移动通信技术的初始部署通常发生在交通密度高、对新服务能力要求高的地区。 然后是逐渐的进一步扩建&#xff0c;根据运营商的策略&#xff0c;扩建的速度或快或慢。 在随后的逐步部署过程中&#xff0c;新技术和传统技术的混合将提供对运营商…