Git的学习

Git

 概念:

​   是一个免费的、开源的分布式 版本控制系统。可以快速

版本控制:

​ 一种记录一个或若干文化内容变化,以便将来查阅特定版本修订情况的系统

​ 好处:

​ 可以将某个文件【甚至整个项目】回溯到之前的状态

​ 可以比较文件的变化细节,并且可查看最后谁进行修改。

  

 版本控制的分类:

  集中化的版本控制系统 [SVN]
    通过一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到该服务器,取出最新的文件或者提交更新。
    缺点:中央服务器的单点故障。

  分布式的版本控制系统[GIT]
    并不只是提取最新版本的文件快照,而是把代码仓库完整地镜像下来。因此该系统可以指定和若干不同的远端代码仓库进行交互。因此同一项目中分别和不同工作小组的人相互协作。

  

Git结构

  本地结构
在这里插入图片描述

  本地库和远程库地交互方式:

​       团队内部协作
在这里插入图片描述

​     跨团队写作
在这里插入图片描述

  因此需要 通过 代码托管中心来维护远程库

  

托管中心种类:

​ 局域网环境:可以搭建 GitLab服务器作为代码托管中心

​ 外网环境下:可以由GitHub或者Gitee作为代码托管中心

  

初始化本地仓库

【在Git中 命令与 Linux是一致的】

  
查看Git版本

git --version

  
设置签名

设置用户名 与 邮箱

git config --global user.name "xxx"
git config --global user.email "xxx"

[“xxx”:xxx处填写设置的内容]

  

本地仓库的初始化操作

git init

  

常用命令

add命令

​ 主要将本地库的文件提交到暂存区

命令行:

git add 文件名.后缀

eg:

​ 1.首先 创建一个 想要提交的文件

gitFile.txt

​ 2.使用 add命令 将暂存区的内容交到本地库

git add gitFile.txt

  

commit命令

​ 主要将暂存区的内容交到本地库

命令行:

git commit -m "备注信息" 文件名.后缀

将add命令中的文件提交至本地库

git commit -m "demo实例提交" gitFile.txt

不放在本地仓库的文件,Git是不对其进行管理。

即使在本地仓库的文件,Git依旧不对其进行管理。

只有通过add,commit命令操作才能将内容提交至本地库。

  

status命令

​ 主要用于查看工作区和暂存区的状态

命令行:

git status

eg:

创建一个文件并提交

git add "gitStatus.txt"

此时 git status将会查看到

Changes to be committed:
	(use "git restore --staged <file>..." to unstage)
		new file: gitStatus.txt

通过git commit之后,再对文件进行修改

git commit -m "status示例" gitStatus.txt

//修改gitStatus.txt内容 ...

此时 git status将会查看到

Changes not staged for commit:
	(use "git add <file>..." to update what will be committed)
	(use "git restore <file>..." to discard changes in working directory)
		modified: gitStatus.txt

  

log命令

  主要查看历史记录

命令行

git log

显示效果

commit xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx [commit 索引]
Author: xxx <xx@xx.com>					[上传人 邮箱]
Data: xx xx DD HH:MM:SS +xx				[时间]

  

其中当有多条数据时,会进行分页。

分页的标识 显示:

下一页:按一次空格键

上一页:b

结束:显示END

退出:q

  

其他形式展开日志

1.git log 前文的方式 由分页效果

2.git log --pretty=oneline

展现的结果

索引 + 备注

3.git log --oneline

展现的结果

索引前几个字段 + 备注

4.git reflog

展现的结果

索引前几个字段 +HEAD@{number} commit: 备注

其中 number 表示:指针当当前历史版本需要多少步

  

reset命令

​ 用于前进或者回退到某一个版本

命令行

git reset --参数 索引

效果:

​ 将版本操作到与索引版本一致

  

参数

1.hard参数

命令行

git reset --hard 索引

主要效果:

​ 在本地库指针移动的同时,将暂存区、工作区重置

2.mixed参数

命令行

git reset --mixed 索引

主要效果:

​ 在本地库指针移动的同时,将暂存区重置。但工作区保持不变。

3.soft参数

命令行

git reset --hard 索引

主要效果:

​ 仅移动本地库。暂存区、工作区都不变

eg:

​ 在操作时误操作 删除了某个文件。
  

找回删除的文件,实际就是把历史版本切换到最近有那个文件的版本

git reset --hard 有该文件的版本索引

  

diff命令

​ 可以将工作区与暂存区的文件进行对比。

git diff 文件名

1.提交一个文件(diffFile.txt)到本地库。

2.在工作区中修改该文件的内容

3.此时便可以输入

git diff diffFile.txt

结果为:

diff --git a/diffFile.txt b/diffFile.txt
index xxx..xxx 23123
--- a/diffFile.txt
+++ b/diffFile.txt
@@ -1 +1 @@
-1111 [此处 - 为删除 上面-1是减少一行]
\ No newline at end of file
+2222 [此处 + 为添加 上面+1是加少一行]
\ No newline at end of file

多个文件的对比git diff

  

Git分支

什么是分支:

​ 在版本控制过程中,使用多条线同时推进多个任务。这里面说的是多条线,就是多个分支。

在这里插入图片描述

分支的好处:

​ 可以允许多个分支可以并行开发,互相不影响,提高开发效率。

​ 如果有一个分支功能开发失败,直接删除即可,不影响整体进度。

  

常见Git分支操作

查看分支

git branch -v

创建分支

git branch 新分支名

切换分支

git checkout 分支名

  

合并分支

git merge 分支名

冲突问题

  背景:

    1.branch_1 分支中 textFile.txt的内容被修改

​    2.branch_2 分支中 同样对该文件进行修改

​    3.在branch_1分支中想要合并branch_2分支中

【在大分支(branch_1)将合并分支(branch_2),首先要在大分支环境中】

git merge branch_2

此时会出现冲突

Auto-merging textFile.txt
CONFLICT(content):Merge conflict in textFile.txt   [表明该处出现冲突]
Automatic merge failed;fix conflicts and then commit the result.

.... (branch_1 |MERGING) [表明正在处于合并状态]

  

何时会出现冲突问题?

​ 都在用一个文件中同一个位置进行修改。

  

解决冲突方法

​ 1.商议适合需求的决策,保留所需的代码。

​ 2.将处理后的文件添加到暂存区中。add

​ 3.此时要进行commit操作。但需要注意的是不要带上文件,否则会报错。

git commit -m "merge files"

​ 4.此时就可以查看到 该分支状态不处于合并状态。

  

GitHub的相关操作

官网注册:GitHub

创建远程库

  1.在本地 将一个项目进行git init

  2.进入Github 的 ➕ 的 New repsitory
在这里插入图片描述

创建好后进入该远程库

在这里插入图片描述

HTTPSSSH 。 主要作用是获取该远程仓库地址的方式

由于地址较长,每一次操作起来都不太高效。

因此有 别名 来提高效率。

起别名的命令:

git remote add 别名 地址

  

常见操作

克隆操作

git clone 远程库地址

当进行克隆操作时,还会完成

​ 1.初始化本地库

​ 2.将远程库的内容复刻到本地

​ 3.替我们创造远程库的别名

 

push 推送操作

git push 远程库的别名 推送的分支

eg:

git push repostion master

将本地master分支的内容提交的远程库的master分支(如果远程仓库没有mater分支,则会默认添加)

通常操作

​ 1.更新本地库 add commit

​ 2.push到远程库

git push 远程库 分支

 

pull操作

​ pull 约等于 fetch +merge 来完成远程库的拉取

git pull 远程库别名 远程库对应分支

1.抓取远程库

git fetch 远程库别名 远程库对应分支

执行抓取操作后,仅仅只是将远程库的内容下载至本地。工作区的文件仍是原来的内容。

2.此时可以在远程库查看内容是否正确

git checkout 远程库别名/远程库对应分支
ll

3.确定内容正确后,便可以进行合并操作。但需要将分支切换到本地分支上

进行合并

git merge 远程库别名/远程库对应分支

以上的操作都可以直接通过pull操作完成

 

协同开发合作时冲突的解决方法

1.角色:[Tom]

​ 向远程库推送文件add commit push

2.角色:[Jerry]

​ 进行一个pull操作,并修改了里面的文件。再次进行 推送

3.角色:[Tom]

​ 恰好与Jerry一样,对同一个文件进行操作,并且推送。

【此时则会出现冲突】

解决冲突的方法:

​ 1.先拉取远程库文件

git pull 远程库别名 远程库对应分支

2.修改冲突

​ 人为的进行删改

3.推送至远程库

git add 文件名
git commit -m "发生冲突问题时,切记不要带文件名"

热门文章

暂无图片
编程学习 ·

Java输出数组的内容

Java输出数组的内容_一万个小时-CSDN博客_java打印数组内容1. 输出内容最常见的方式// List<String>类型的列表List<String> list new ArrayList<String>();list.add("First");list.add("Second");list.add("Third");list.ad…
暂无图片
编程学习 ·

母螳螂的“魅惑之术”

在它们对大蝗虫发起进攻的时候&#xff0c;我认认真真地观察了一次&#xff0c;因为它们突然像触电一样浑身痉挛起来&#xff0c;警觉地面对限前这个大家伙&#xff0c;然后放下自己优雅的身段和祈祷的双手&#xff0c;摆出了一个可怕的姿势。我被眼前的一幕吓到了&#xff0c;…
暂无图片
编程学习 ·

疯狂填词 mad_libs 第9章9.9.2

#win7 python3.7.0 import os,reos.chdir(d:\documents\program_language) file1open(.\疯狂填词_d9z9d2_r.txt) file2open(.\疯狂填词_d9z9d2_w.txt,w) words[ADJECTIVE,NOUN,VERB,NOUN] str1file1.read()#方法1 for word in words :word_replaceinput(fEnter a {word} :)str1…
暂无图片
编程学习 ·

HBASE 高可用

为了保证HBASE是高可用的,所依赖的HDFS和zookeeper也要是高可用的. 通过参数hbase.rootdir指定了连接到Hadoop的地址,mycluster表示为Hadoop的集群. HBASE本身的高可用很简单,只要在一个健康的集群其他节点通过命令 hbase-daemon.sh start master启动一个Hmaster进程,这个Hmast…
暂无图片
编程学习 ·

js事件操作语法

一、事件的绑定语法 语法形式1 事件监听 标签对象.addEventListener(click,function(){}); 语法形式2 on语法绑定 标签对象.onclick function(){} on语法是通过 等于赋值绑定的事件处理函数 , 等于赋值本质上执行的是覆盖赋值,后赋值的数据会覆盖之前存储的数据,也就是on…
暂无图片
编程学习 ·

Photoshop插件--晕影动态--选区--脚本开发--PS插件

文章目录1.插件界面2.关键代码2.1 选区2.2 动态晕影3.作者寄语PS是一款栅格图像编辑软件&#xff0c;具有许多强大的功能&#xff0c;本文演示如何通过脚本实现晕影动态和选区相关功能&#xff0c;展示从互联网收集而来的一个小插件&#xff0c;供大家学习交流&#xff0c;请勿…
暂无图片
编程学习 ·

vs LNK1104 无法打开文件“xxx.obj”

写在前面&#xff1a; 向大家推荐两本新书&#xff0c;《深度学习计算机视觉实战》和《学习OpenCV4&#xff1a;基于Python的算法实战》。 《深度学习计算机视觉实战》讲了计算机视觉理论基础&#xff0c;讲了案例项目&#xff0c;讲了模型部署&#xff0c;这些项目学会之后可以…
暂无图片
编程学习 ·

工业元宇宙的定义与实施路线图

工业元宇宙的定义与实施路线图 李正海 1 工业元宇宙 给大家做一个关于工业元宇宙的定义。对于工业&#xff0c;从设计的角度来讲&#xff0c;现在的设计人员已经做到了普遍的三维设计&#xff0c;但是进入元宇宙时代&#xff0c;就不仅仅只是三维设计了&#xff0c;我们的目…
暂无图片
编程学习 ·

【leectode 2022.1.15】完成一半题目

有 N 位扣友参加了微软与力扣举办了「以扣会友」线下活动。主办方提供了 2*N 道题目&#xff0c;整型数组 questions 中每个数字对应了每道题目所涉及的知识点类型。 若每位扣友选择不同的一题&#xff0c;请返回被选的 N 道题目至少包含多少种知识点类型。 示例 1&#xff1a…
暂无图片
编程学习 ·

js 面试题总结

一、js原型与原型链 1. prototype 每个函数都有一个prototype属性&#xff0c;被称为显示原型 2._ _proto_ _ 每个实例对象都会有_ _proto_ _属性,其被称为隐式原型 每一个实例对象的隐式原型_ _proto_ _属性指向自身构造函数的显式原型prototype 3. constructor 每个prot…
暂无图片
编程学习 ·

java练习代码

打印自定义行数的空心菱形练习代码如下 import java.util.Scanner; public class daYinLengXing{public static void main(String[] args) {System.out.println("请输入行数");Scanner myScanner new Scanner(System.in);int g myScanner.nextInt();int num g%2;//…
暂无图片
编程学习 ·

RocketMQ-什么是死信队列?怎么解决

目录 什么是死信队列 死信队列的特征 死信消息的处理 什么是死信队列 当一条消息初次消费失败&#xff0c;消息队列会自动进行消费重试&#xff1b;达到最大重试次数后&#xff0c;若消费依然失败&#xff0c;则表明消费者在正常情况下无法正确地消费该消息&#xff0c;此时…
暂无图片
编程学习 ·

项目 cg day04

第4章 lua、Canal实现广告缓存 学习目标 Lua介绍 Lua语法 输出、变量定义、数据类型、流程控制(if..)、循环操作、函数、表(数组)、模块OpenResty介绍(理解配置) 封装了Nginx&#xff0c;并且提供了Lua扩展&#xff0c;大大提升了Nginx对并发处理的能&#xff0c;10K-1000K Lu…
暂无图片
编程学习 ·

输出三角形

#include <stdio.h> int main() { int i,j; for(i0;i<5;i) { for(j0;j<i;j) { printf("*"); } printf("\n"); } }
暂无图片
编程学习 ·

stm32的BOOTLOADER学习1

序言 最近计划学习stm32的BOOTLOADER学习,把学习过程记录下来 因为现在网上STM32C8T6还是比较贵的,根据我的需求flash空间小一些也可以,所以我决定使用stm32c6t6.这个芯片的空间是32kb的。 #熟悉芯片内部的空间地址 1、flash ROM&#xff1a; 大小32KB&#xff0c;范围&#xf…
暂无图片
编程学习 ·

通过awk和shell来限制IP多次访问之学不会你打死我

学不会你打死我 今天我们用shell脚本&#xff0c;awk工具来分析日志来判断是否存在扫描器来进行破解网站密码——限制访问次数过多的IP地址&#xff0c;通过Iptables来进行限制。代码在末尾 首先我们要先查看日志的格式&#xff0c;分析出我们需要筛选的内容&#xff0c;日志…
暂无图片
编程学习 ·

Python - 如何像程序员一样思考

在为计算机编写程序之前&#xff0c;您必须学会如何像程序员一样思考。学习像程序员一样思考对任何学生都很有价值。以下步骤可帮助任何人学习编码并了解计算机科学的价值——即使他们不打算成为计算机科学家。 顾名思义&#xff0c;Python经常被想要学习编程的人用作第一语言…
暂无图片
编程学习 ·

蓝桥杯python-数字三角形

问题描述 虽然我前后用了三种做法&#xff0c;但是我发现只有“优化思路_1”可以通过蓝桥杯官网中的测评&#xff0c;但是如果用c/c的话&#xff0c;每个都通得过&#xff0c;足以可见python的效率之低&#xff08;但耐不住人家好用啊&#xff08;哭笑&#xff09;&#xff09…