精简版Git基础操作(快速上手)

news2024/11/25 14:34:21

文章目录

  • 前言
  • 一、初始化
  • 二、新建仓库
  • 三、工作区域和文件状态
  • 四、添加和提交文件
  • 五、回退到之前版本
  • 六、查看文件差异
  • 七、从版本库中删除文件
  • 八、.gitignore忽略文件
  • 九、github远程仓库--SSH配置和克隆仓库
  • 十、关联本地仓库与远程仓库
  • 十一、分支
  • 十二、解决合并冲突
  • 回退和rebase
  • 其他命令
    • 1.打标签
    • 2.储藏当前工作现场
    • 3.git pull 和 git fetch
  • 注意
  • 总结


前言

  • Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或大或小的项目。
  • Git是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源代码的版本控制软件。
  • Git与常用的版本控制工具CVS、Subversion等不同,它采用了分布式版本库的方式,不用服务器端软件支持,各个客户端都有一个最新版本信息,当服务器故障了,各个客户端都不会受到影响。# 一、pandas是什么?

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

一、初始化

设置用户名

 git config --global user.name "Yaepii Jia"

设置邮箱

git config --global user.email yaepii@126.com

保存用户名和密码

git config --global credential.helper store

查看配置信息

git config -l

–global关键字:全局配置,所有仓库生效

–system关键字:系统配置,对所有用户生效

在这里插入图片描述


二、新建仓库

仓库就是用来存放和管理代码的一个容器,新建仓库就是把一个电脑中的文件夹目录变成git可以管理的仓库就可以了。
方式一:在电脑本地创建一个仓库

git init [仓库名]

在这里插入图片描述
下图中的.git文件记录了仓库的信息,这是一个隐藏文件夹,需要用ls -a命令才能显示,进入到这个目录,可以使用ls -altr命令显示详细信息,当删除.git文件夹,仓库也会被删除。
在这里插入图片描述

方式二:从远程克隆一个已经存在的仓库

git clone <仓库地址>

三、工作区域和文件状态

工作区域分为:

  • 工作区:本地文件夹目录,实际操作的目录
  • 暂存区:保存即将提交到git上的修改内容
  • 本地仓库:存储代码和版本信息

在这里插入图片描述
工作流程一般是:将工作区的文件先添加到暂存区,然后通过提交命令一次性提交到本地仓库。

文件状态:
在这里插入图片描述

四、添加和提交文件

查看当前仓库的状态:

git status

在这里插入图片描述
将文件添加到暂存区,等待提交:

git add <文件名>
git add .		#将所有文件添加到暂存区

在这里插入图片描述
取消暂存(从版本库和暂存区中删除文件,但不在工作区删除文件):

git rm --cached <file_name>

将文件提交到仓库中:

git commit -m "提交信息"

在这里插入图片描述
查看提交记录:

git log
git log --oneline		#查看简洁版提交信息

在这里插入图片描述

五、回退到之前版本

命令:git reset --param <版本id>
三个参数:

  • soft:保留工作区和暂存区所有内容
  • hard:删除工作区和暂存区所有内容
  • mixed:默认,删除暂存区内容,保存工作区内容
git reset HEAD^		##HEAD表示版本的指针,指向当前版本,^表示上一版本

在这里插入图片描述
查看操作的历史记录,可以回退到之前某个版本号:

git reflog

在这里插入图片描述

六、查看文件差异

查看文件在(不同区域、不同版本、不同分支)之间的差异,用得不多,因为以后开发主要是在图形化工具中使用git。

git diff									#比较工作区和暂存区文件的差异(默认)
git diff HEAD								#比较工作区和版本库文件的差异
git diff --cached							#比较暂存区和版本库文件的差异
git diff <版本1的ID> <版本2的ID> [file_name]	#比较两个版本文件的差异
git diff HEAD~n HEAD [file_name]			#比较当前版本和上n个版本文件的差异

在这里插入图片描述

七、从版本库中删除文件

使用这个命令,会将文件从工作区和暂存区同时删除,然后需要再提交一下,更新版本库中内容

git rm <file_name>

如果想只在暂存区删除一个文件,而工作区不删除,可以加上–cached参数

git rm --cached <file_name>

在这里插入图片描述

八、.gitignore忽略文件

在.gitignore文件中添加一些文件或文件夹(比如:日志文件.log、编译中间文件、临时文件等),可以使得在提交时,将.gitignore中的文件被忽略,不提交。
但是当前.gitignore中的文件不能是已经被添加到版本库中的文件,当这些文件发生修改时,git还是会检测到其内容的修改。
匹配规则:从上到下逐行匹配,每一行表示一个忽略模式,官网匹配规则
提示:github上提供了常用语言的忽略文件模板。

九、github远程仓库–SSH配置和克隆仓库

在本地创建一个ssh秘钥:

ssh-keygen -t rsa -C "your_email@example.com" -b 4096
  • -t 指定密钥类型,默认是 rsa ,可以省略。
  • -C 设置注释文字,比如邮箱。
  • -f 指定密钥文件存储文件名,一般默认,让存储到默认路径以及默认文件名
  • -b指定密钥的大小,默认也可以

它会要求输入Enter file in which to save the key (/home/stephenzhou/.ssh/id_rsa)
这里是要求输入秘钥的文件名,我们可以回车使用默认文件名,但当之前已经创建过秘钥文件,应该再自己设置一个,最好不要用默认。
然后会要求你输入密码,这个密码是在提交时输入的,和登录密码不一样,输入完成后会产生两个文件:id_rsa是私匙,id_rsa.pub是公匙,id_rsa不能告诉任何人,只有公钥可以,ssh采用的是非对称加密。
然后再github中,点击个人头像,选择settings,添加ssh公钥,将pub文件的内容复制进来,然后自定义一个名字,点击添加,输入登录密码后就完成了添加。
在这里插入图片描述
在这里插入图片描述
然后在本地端使用git clone命令就可以拷贝某一个项目到本地文件夹下(不需要git init初始化仓库,直接在一个普通文件夹下git clone即可)

git clone git@github.com:xxxxx.git

在这里插入图片描述
本地仓库和远程仓库是两个地方,在本地仓库进行修改后,远程仓库不会同步修改内容,需要一种机制将它们之间关联起来,这里用到两个命令:git pull(拉取:将远程仓库的修改同步到本地)git push(推送:将本地仓库的修改同步到远程仓库)
在这里插入图片描述

cd remote-repo_name
vim hello.txt
git add .
git commit -m "first commit"
git push

在这里插入图片描述

十、关联本地仓库与远程仓库

一般来说当我们在本地仓库写完本地仓库后,在github上创建了一个空的仓库,用以下命令,将他们关联起来:

git remote add <remote_name> <url>

remote_name:远程仓库的别名,一般填origin
url:远程仓库的git链接

当从github上clone下来一个仓库后,就不用上面这行代码了,git自动建立了本地仓库和远程仓库的链接。
查看当前仓库对应的远程仓库的别名和地址:

git remote -v

指定分支的名称为main:

git branch -M main

将本地仓库的main分支和远程仓库的main分支关联起来**(本地仓库提交了文件之后,push提交才能在github上显示出来)**:

git push -u origin main

-u:将本地仓库分支与远程仓库分支一起合并
在这里插入图片描述
从远程仓库拉取修改内容:

git pull <romote_name> <romote_branch>:<local_branch>

删除远程仓库:

git remote rm <remote_name>

十一、分支

分支类似于版本库中的不同版本,可以独立存在和提交,分支可以使得一个项目的各个模块实现独立开发与测试,提高了整体项目的工作效率。
查看当前仓库的所有分支:

git branch

创建一个新的分支:

git branch <branch_name>

切换分支:

git checkout <branch_name>

在这里插入图片描述
但是使用这个命令切换分支可能会存在一些问题:因为checkout不仅可以切换分支,还有恢复文件的功能,当分支名和文件名相同时,就会出现歧义,默认会切换分支。
语义明确的切换分支:

git switch <branch_name>

在这里插入图片描述
切换回main分支,使用ls命令发现,没有dev.txt类型的文件夹,这是因为在dev分支进行了修改还没有合并到main分支中。
在这里插入图片描述
将不同的分支合并到当前的分支中,当前分支为目标分支:

git merge <被合并的分支名>

在这里插入图片描述
合并后会自动进行一次提交,Windows下会使用默认的提交信息,使用以下命令可以修改提交信息,也可以在执行命令时加上-m参数:

git commit --amend

在这里插入图片描述
在命令行中查看分支图:

git log --graph --oneline --decorate --all

在这里插入图片描述
删除已完成合并的分支:

git branch -d <branch_name>

如果这个分支没有被合并,需要用-D参数进行强制删除:

git branch -D <branch_name>

在这里插入图片描述

十二、解决合并冲突

如果两个分支修改了同一个文件的同一行代码,就会发生合并冲突。
创建feat分支,并在feat分支下对main1.txt文件进行修改,然后提交:

git branch feat
git switch feat
vim main1.txt
git commit -am "feat:1"			#加上-a参数可以同时完成暂存和提交两个动作

返回main分支,然后在main分支下对main1.txt文件进行修改,然后提交:

git switch main
vim main1.txt
git commit -am "feat:1"			#加上-a参数可以同时完成暂存和提交两个动作

合并两个分支,提示自动合并失败:

git merge <被合并的分支名>

在这里插入图片描述
可以使用git status查看冲突:
在这里插入图片描述
这时就需要手动修改文件内容,解决冲突,也可以使用以下命令终止合并:

vim main1.txt
git commit =am "merge conflict"		#修改后再次提交
git merge --abort					#终止合并

回退和rebase

rebase中文意思是“变基”,也是用来整合分支的,可以在任意分支上使用rabase命令整合分支,整合完都是一条直线,但顺序会有所不同:

  • 如果在dev分支上使用rebase命令,dev分支的提交会整合到main分支后面
  • 如果在main分支上使用rebase命令,main分支的提交会整合到dev分支后面

恢复已合并的分支:

git checkout -b <branch_name> <branch_id>

在这里插入图片描述
切换到dev分支,执行命令进行rebase合并:

git switch dev
git rebase main

在这里插入图片描述
切换到main分支,执行命令进行rebase合并:

git switch main
git rebase dev

在这里插入图片描述
Merge合并:

  • 优点:不会破坏原分支的提交历史,方便回溯和查看
  • 缺点:会产生额外的提交节点,分支图比较复杂

Rebase合并:

  • 优点:不会新增额外的提交记录,形成线性历史,比较直观和干净
  • 缺点:会改变提交历史,改变了当前分支branch out的节点,避免在共享分支中使用

其他命令

1.打标签

给当前的提交打上标签,通常用于版本发布:

git tag <tag_name>

2.储藏当前工作现场

在开发过程中,在一个分支开发新的功能,还没开发完毕,做到一半时有反馈需要处理紧急bug,但是新功能开发了一半又不想提交,这时就用到了stash命令,储藏当前工作现场:

git stash save “message”将当前工作现场存储到堆栈中
git stash list查看所有stash
git stash pop恢复最近一次stash,并在list中删除这次stash
git stash pop stash@{n}恢复指定的stash,stash@{0}表示最近的stash
git stash apply n恢复指定的stash,但不会再list中删除
git stash drop stash@{n}在list中删除指定的stash
git stash clear删除所有stash

3.git pull 和 git fetch

  • git fetch是将远程主机的最新内容拉到本地,用户在检查了以后决定是否合并到工作本机分支中。
  • git pull 则是将远程主机的最新内容拉下来后直接合并,即:git pull = git fetch + git merge,这样可能会产生冲突,需要手动解决。

git fetch用法:

git fetch <romote_name> 				#将某个远程仓库的更新全部取回本地
git fetch <romote_name> <branch_name> 	#将某个远程仓库的某个分支更新取回本地

git pull用法等于:

git fetch <romote_name> <branch_name> 	#将某个远程仓库的某个分支更新取回本地
git merge FETCH_HEAD    				#将拉取下来的最新内容合并到当前所在的分支中

git pull用法:

git pull <romote_name <remote_branch_name>:<local_branch_name>

一般工作流程:

git fetch  							#代码拉取到本地之后
git branch 							#查看分支
git switch <remote_branch_name> 	#切换到远程分支

注意

git add.时出现警告:LF will be replaced by CRLF the next time Git touches it

CR为回车符, LF为换行符。Windows结束一行用CRLF, Mac和Linux用LF。
与core.autocrlf参数有关:
false表示取消自动转换功能。适合纯Windows
true表示提交代码时把CRLF转换成LF,签出时LF转换成CRLF。适合多平台协作
input表示提交时把CRLF转换成LF,检出时不转换。适合纯Linux或Mac

Windows平台下默认设置为true,警告不用管它,这是合理的;Linux平台下把这个参数设置为input即可。
设置方法:

git config --global core.autocrlf false/true/input

总结

推荐这个B站教程,满满干货,视频制作精简且高质量,UP声音好听,没有废话!!!

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

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

相关文章

Go mmap 文件内存映射

Go mmap 文件内存映射 mmap是个很好用的内存映射工具&#xff0c;它可以将文件映射到内存中&#xff0c;可以方便地操作文件。使用mmap的优点是&#xff1a; 内存映射可以使得读写文件的性能更高&#xff0c;因为操作的是内存而不是磁盘。可以方便地操作文件&#xff0c;不需…

语音录音转文字的方法使用过吗

大家好&#xff01;今天我要给你们介绍一个实用的功能&#xff0c;那就是录音转文字啦&#xff01;它可以把录音中的声音内容快速且准确地转换成文字格式&#xff0c;让我们在工作和学习中变得更加高效和便利。我们在会议记录、采访访谈、语音笔记等领域&#xff0c;可以很大地…

自动化测试之稳定性测试的设计

目录 前言 压力Stress 随机Randomness 并发Concurrency 交互Interaction 时间Time 总结&#xff1a; 前言 稳定性测试是自动化测试领域最为核心的内容之一。稳定性测试设计应该考虑哪些方面&#xff1f;如何在有限的样本上最大化测试产出&#xff1f;笔者结合自动化的一…

Vivado 下 呼吸灯实验

目录 Vivado 下 呼吸灯实验 1、实验简介 2、实验环境 3、实验任务 4、硬件设计 5、程序设计 5.1、呼吸灯代码如下&#xff1a; 5.2、添加约束文件 .xdc 5.3、下载验证 Vivado 下 呼吸灯实验 呼吸灯最早由苹果公司发明并应用于笔记本睡眠提示上&#xff0c;其一经展出&…

2023年6月GESP能力等级认证C++二级真题

2023-06 GESP二级真题 题数&#xff1a;27 分数&#xff1a;100 测试时长&#xff1a;90min 一、单选题&#xff08;每题 2 分&#xff0c;共 30 分&#xff09; 1. 高级语言编写的程序需要经过以下&#xff08; &#xff09;操作&#xff0c;可以生成在计算机上运行的可执…

电商数仓(用户行为采集平台)数据仓库概念、用户行为日志、业务数据、模拟数据、用户行为数据采集模块、日志采集Flume

1、数据仓库概念 数据仓库&#xff08; Data Warehouse &#xff09;&#xff0c;是为企业制定决策&#xff0c;提供数据支持的。可以帮助企业&#xff0c;改进业务流程、提高产品质量等。 数据仓库的输入数据通常包括&#xff1a;业务数据、用户行为数据和爬虫数据等。 业务数…

Linux信号概念、认识、处理动作 ( 2 ) -【Linux通信架构系列 】

系列文章目录 C技能系列 Linux通信架构系列 C高性能优化编程系列 深入理解软件架构设计系列 高级C并发线程编程 期待你的关注哦&#xff01;&#xff01;&#xff01; 现在的一切都是为将来的梦想编织翅膀&#xff0c;让梦想在现实中展翅高飞。 Now everything is for the…

适合嵌入式开发的GUI(嵌入式学习)

嵌入式开发的GUI如何选择&#xff1f; 常见的嵌入式GUI开发方法轻量级GUI库优缺点 基于Web技术优缺点 Qt框架优缺点 原生开发优缺点 嵌入式系统的限制 常见的嵌入式GUI开发方法 嵌入式开发中的GUI&#xff08;图形用户界面&#xff09;是指在嵌入式系统中实现图形化的用户界面…

Unity核心7——2D动画

一、序列帧动画 &#xff08;一&#xff09;什么是序列帧动画 ​ 我们最常见的序列帧动画就是我们看的日本动画片&#xff0c;以固定时间间隔按序列切换图片&#xff0c;就是序列帧动画的本质 ​ 当固定时间间隔足够短时&#xff0c;我们肉眼就会认为图片是连续动态的&#…

Pandas数据处理与分析教程:从基础到实战

文章目录 前言什么是Pandas&#xff1f;Pandas的安装和导入数据结构Series&#xff08;案例1&#xff1a;创建Series&#xff09;DataFrame&#xff08;案例2&#xff1a;创建DataFrame&#xff09; 数据读取和写入从CSV文件中读取数据&#xff08;案例3&#xff1a;读取CSV文件…

一起学SF框架系列6.2-模块core-Environment

Environment是集成在容器中的抽象接口&#xff0c;它对应用程序环境的两个关键方面进行建模&#xff1a;配置文件&#xff08;profiles&#xff09;和属性&#xff08;properties&#xff09;。 配置文件&#xff08;profiles&#xff09; 配置文件为核心容器中提供了一种机制…

Redis7---单线程和多线程(一)

目录 一、几个面试题 1.Redis的单线程部分 1.2 Redis所谓的“单线程” 1.3 Redis演进变化 1.3.1 Redis 3.x 单线程时代性能很快的原因 1.3.2 Redis 4.0 之前一直采用单线程的主要原因有三个 2. Redis单线程为什么加了多线程特性 3.Redis 6/7的多线程特性和IO多路复用入…

【系统架构】第二章-计算机系统基础知识(一)

计算机硬件 1、处理器&#xff1a;CISC&#xff08;复杂指令集&#xff09;、RISC&#xff08;精简指令集&#xff09; 2、存储器&#xff1a;按照与处理器的物理距离&#xff1a;片上缓存、片外缓存、主存、外存 3、总线&#xff1a;按照总线在计算机中的位置划分&#xff1a…

大厂流出2023年最新软件测试面试题【全】

1.B/S架构和C/S架构区别 B/S 只需要有操作系统和浏览器就行&#xff0c;可以实现跨平台&#xff0c;客户端零维护&#xff0c;维护成本低&#xff0c;但是个性化能力低&#xff0c;响应速度较慢C/S响应速度快&#xff0c;安全性强&#xff0c;一般应用于局域网中&#xff0c;因…

格雷码转换电路

目录 格雷码转换电路 1、简介 1.2、格雷码转化为二进制码原理如下&#xff1a; 1.3、二进制码转化为格雷码原理如下&#xff1a; 2、实验任务 3、程序设计 3.1、格雷码转换二进制 3.2、二进制转换格雷码 4、仿真测试 5、仿真验证 格雷码转换电路 格雷码&#xff0c;…

推荐一款能够节省办公空间的显示器!

作为一名高校科研人员&#xff0c;课题组师生日常科研工作必备电子设备的维护及更新对于科研进度有着极大影响作用。近日购买了最新一代的戴尔显示器E2424HS。 以下是我的一些真实使用体验&#xff1a; 01 外观高端大气 拆箱前&#xff0c;在检查外包装没有任何破损后&#…

城市道路工程设计技术措施

为在城市道路工程建设中正确执行国家和行业有关法律、标准、规范和规程&#xff0c;提高工程建设质量&#xff0c;特制定《城市道路工程设计技术规程》&#xff08;2011年版&#xff09;专门编的。  本办法主要依据国家和行业有关法规、标准、规范和规程等&#xff0c;参照地…

Spring 是什么框架?

对于一门技术&#xff0c;我们需要从为什么要学、学什么以及怎么学这三个方向入手来学习。那在说Spring这三点之前&#xff0c;我们先看Spring之前要学什么。 Java基础、Java语法进阶、MySQL基础操作、MySQL数据库设计和多表操作、JDBC、Maven基础、MyBatis、HMLCSS、JavaScrip…

字节跳动做了3年软件测试,五月无情被辞,想给划水的兄弟提个醒

前言 先简单交代一下背景吧&#xff0c;某不知名 985 的本硕&#xff0c;20 年毕业加入字节&#xff0c;以“人员优化”的名义无情被裁员&#xff0c;之后跳槽到了有赞&#xff0c;一直从事软件测试的工作。之前没有实习经历&#xff0c;算是5年的工作经验吧。 这5年之间完成…

全网最全,Web测试点详细整理(测试场景举例+常见问题分析)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 Web测试检查表 功…