Git介绍及常用命令详解

news2024/11/24 7:08:56

一、Git的概述

Git是一个分布式版本控制工具,通常用来对软件开发过程中的源代码文件进行管理。

Git 会跟踪我们对文件所做的更改,因此我们可以记录已完成的工作,并且可以在需要时恢复到特定或以前的版本。Git 还使多人协作变得更加容易,允许将多个人的更改全部合并到一个源中。

二、Git的常用命令

命令名称作用
git config --global user.name 用户名设置用户签名
git config --global user.email 邮箱设置用户签名
git init初始化本地库
git status查看本地库状态
git add 文件名添加到暂存区
git commit -m “日志信息” 文件名提交到本地库
git reflog查看历史记录
git reset --hard 版本号版本穿梭

2.1.设置用户签名

用法

git config --global user.name 用户名 
git config --global user.email 邮箱

在这里插入图片描述

在这里插入图片描述

说明:“
签名的作用是区分不同操作者身份。用户的签名信息在每一个版本的提交信息中能够看到,以此确认本次提交是谁做的。Git 首次安装必须设置一下用户签名,否则无法提交代码。注意: 这里设置用户签名和将来登录 GitHub(或其他代码托管中心) 的账号没有任何关系。“

设置完成之后会在对应的用户下存在.gitconfig文件

2.2.初始化本地库

2.2.1.基本语法

git init

在这里插入图片描述

执行完成之后会出现.git文件,初始化成功

在这里插入图片描述

2.2.查看本地库状态

git status

在这里插入图片描述

2.3.添加暂存区

本地修改完的文件,需要添加到暂存区才可以提交本地仓库。

git add 文件名
或者
git add .

在这里插入图片描述

删除暂存区内容

git restore --staged 文件名
git rm --cached  文件名   (这是比较旧的命令)
区别:
git restore 恢复我此次的修改,我此次的修改不提交
git rm 是删除文件,就是本来仓库中已经有了这个文件,但是我把他删除

git restore --staged 文件名 : 将文件从暂存区撤出,但不会撤销文件的更改(我修改了文件,已经放到暂存区了,现在我不想将这次修改放到暂存区,可以使用 这个命令)
git restore 文件名 :将在工作区中的修改丢弃(需要被追踪,也就是也就被版本控制的文件才可以使用git restore命令

比如我已经把这个文件删掉了,那么我就可以使用这个命令放弃这个删除,但是如果我已经将删掉这个文件并且提交到暂存区之后,那么我需要先执行git restore --staged 文件名之后才可以执行这个命令)

git rm --cached命令与git rm命令都可以删除git版本库中的文件,但是两者之间有一些区别。

使用git rm -f 文件名 命令会将文件从版本库中删除,并且同时删除工作区中对应的文件。而使用git rm --cached 文件名命令会将文件从版本库中删除,但是不删除工作区中的对应文件。

1.git rm 会删除工作区中的文件;
2.git rm 会同时将删除的文件添加到暂存区;
【因此 git rm 相当于 rm + git add 两个命令】
【注意】 git rm 删除的文件必须是 没有经过修改的,也就是说必须要和当前版本库的内容一致的。
3.git commit 后,版本库中的此文件记录也会被删除。
如果git rm 文件  删除的文件和上一个版本库内容不一致,那么要执行删除,则会出现报错。
这时可以使用git rm -f 文件 进行强制删除
.git rm --cached 会删除暂存区中的文件,但是会保留工作区中的文件,并将此次删除提交到暂存区;
2.因此:文件从暂存区中删除掉,即不会被提交到版本库中,也就是说此文件被取消了版本控制。
3.注意 : --cached 参数 删除的文件必须是已经被追踪的文件,即之前被版本控制的文件
向暂存区告知本文件已经删除,但工作区却偷偷保留这个文件。于是commit后仓库就不会有这个文件,是为了用户本次不想上传某些缓存文件设立。

在这里插入图片描述

2.4.提交本地库

git commit -m "日志信息"

在这里插入图片描述

2.5.历史版本

查看提交记录

git reflog

git log

在这里插入图片描述

git reset --hard 版本号

穿越回对应的版本号

在这里插入图片描述

Git 切换版本,底层其实是移动的 HEAD 指针,具体原理如下图所示。
在这里插入图片描述

指针指向对应的版本。

三、GIT分支操作

3.1.什么是分支

在这里插入图片描述

在版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个任务的单独分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时候,不会影响主线分支的运行。分支可以简单理解为副本,一个分支就是个单独的副本。(分支底层其实也是指针的引用)

在这里插入图片描述

3.2.分支的好处

同时并行推进多个功能开发,提高开发效率。

各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败
的分支删除重新开始即可。

3.3.分支的操作

命令名称作用
git branch 分支名创建分支
git branch -v查看分支
git checkout 分支名切换分支
git merge 分支名把指定的分支合并到当前分支上

3.3.1.查看分支

git branch -v	

在这里插入图片描述

3.3.2.创建分支

git branch 分支名	

在这里插入图片描述

3.3.3.切换分支

git checkout 分支名

在这里插入图片描述

3.3.4.合并分支

git merge 分支名

正常合并情况(没有出现冲突)
在这里插入图片描述

出现冲突情况进行合并

产生冲突原因:

合并分支时,两个分支在同一个文件的同一个位置有两套完全不同的修改。Git 无法替我们决定使用哪一个。必须人为决定新代码内容。“查看状态(检测到有文件有两处修改)“

在这里插入图片描述

在这里插入图片描述

这时需要手动进行合并分支

  • 打开冲突文件

在这里插入图片描述

修改前:

在这里插入图片描述

修改后

在这里插入图片描述

保存之后添加暂存区

git add test4.txt

提交版本库

git commit -m "日志信息"  (此时不能带文件名)

在这里插入图片描述

master、fix-bug 其实都是指向具体版本记录的指针当前所在的分支,其实是由 HEAD决定的。所以创建分支的本质就是多创建一个指针。“
HEAD 如果指向 master,那么我们现在就在 master 分支上。“HEAD 如果执行 hotfix,那么我们现在就在 hotfix 分支上。“所以切换分支的本质就是移动 HEAD 指针。

3.3.5.创建并切换分支

git checkout -b 分支名 // 新建  分支,并切换到该分支上

在这里插入图片描述

3.3.6.删除分支

当之前创建的分支,完成了它的使命,如 Bug 修复完,分支合并以后,这个分支就不在需要了,就可以删除它。

git branch -d 分支名 // 删除  分支

在这里插入图片描述

四、GIT团队协作机制

4.1.团队内协作

在这里插入图片描述

4.2.跨团队协作

在这里插入图片描述

五、GitHub操作

5.1.远程仓库操作

命令名称作用
git remote -v查看当前所有远程地址别名
git remote add 别名 远程地址起别名
git push 别名 分支推送本地分支上的内容到远程仓库
git clone 远程地址将远程仓库的内容克隆到本地
git pull 远程库地址别名 远程分支名将远程仓库对于分支最新内容拉下来后与当前本地分支直接合并

5.2.创建远程仓库

使用github或者gitee

在这里插入图片描述

5.2.1.创建远程仓库别名

git remote -v 查看当前所有远程地址别名
git remote add 别名 远程地址

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

5.2.2.添加远程仓库

如果你已经有了一个本地仓库,然后你打算将它发布到远程,供其他人协作。那么使用:

git remote add origin your_remote_git_repo // 为本地仓库添加远程仓库

在这里插入图片描述

5.2.3.移除当前远程仓库

git remote rm origin //先移除之前的远程仓库

在这里插入图片描述

5.3.推送本地分支到远程仓库

git push 别名 分支
或
git push 远程仓库地址 分支

如果出现

fatal: refusing to merge unrelated histories
致命:拒绝合并不相关的历史记录
这是因为本地仓库与远程仓库存在不同的历史记录(不是同一个仓库)
解决方法:
在你操作命令后面加 --allow-unrelated-histories
如git pull 远程仓库地址 分支名 --allow-unrelated-histories

在这里插入图片描述

推送远程仓库

在这里插入图片描述

5.4.拉取远程库到本地库

git pull 别名 分支名
或
git pull 远程仓库地址 分支名
或
git fetch 别名 master

git fetchgit pull 之间的区别:

  • git fetch 是仅仅获取远程仓库的更新内容,并不会自动做合并。

  • git pull 在获取远程仓库的内容后,会自动做合并,可以看成 git fetch 之后 git merge

  • 注意:建议多使用 git fetch

在这里插入图片描述

5.5.克隆远程仓库到本地

git clone 远程仓库地址(克隆公开代码不需要登录)

在这里插入图片描述

git clone 克隆会做三件事

  • 拉去远程代码
  • 初始化本地仓库
  • 创建别名origin

六、SSH免密登录

在对应运用命令生成.ssh密钥目录

ssh-keygen -t rsa -C 892640297@qq.com

在这里插入图片描述

在这里插入图片描述

生成.ssh文件

在这里插入图片描述

在gitee或者github上将公钥输入

在这里插入图片描述

之后就可以使用ssh进行项目的拉取以及推送。

七、自建代码托管平台-GitLab

官网地址:https://about.gitlab.com/

安装说明:https://about.gitlab.com/installation/

八、Git可能需要用到的命令

8.1.查看仓库中的具体修改

git diff    // 查看版本库中所有的改动
git diff Readme.md        // 查看具体文件的改动

很经常的,我们对某个文件做了修改,但过不久就忘记了。这时候就可以通过 git diff 来查看具体的修改内容。

在这里插入图片描述

8.2.版本回退

有了 git reflog 来查看提交的历史记录,我们就可以通过 git reset --hard 来回退到我们需要的特定版本,然后使用当时的代码进行各种操作。

git reset --hard HEAD^        // 回退到上一个提交版本
git reset --hard HEAD^^        // 回退到上上一个提交版本
git reset --hard 'commit_id'    // 会退到 commit_id 指定的提交版本

在这里插入图片描述

8.3.撤销修改

撤销修改同样包括两方面的内容,由于仓库中的文件在提交之前,可能在工作区中,尚未在版本控制范围内,也可能在暂存区中。

8.3.1.丢弃工作区中文件的修改

git checkout -- Readme.md    // 如果 Readme.md 文件在工作区,则丢弃其修改
git checkout -- .            // 丢弃当前目录下所有工作区中文件的修改

注意: git checkout -- 中的 -- 是必须的。

在这里插入图片描述

8.3.2.丢弃已经进入暂存区的修改

git reset HEAD Readme.md // 将 Readme.md 恢复到 HEAD 提交版本的状态
git reset HEAD 文件名 // 将 文件 恢复到 HEAD 提交版本的状态

在这里插入图片描述

8.4.建立本地分支和远程分支的关联

在本地仓库中的分支和远程仓库中的分支是对应的。一般情况下,远程仓库中的分支名称和本地仓库中的分支名称是一致的。

有的时候,我们会需要指定本地分支与远程分支的关联。

git branch --set-upstream-to=origin/远程分支名 本地分支名

在这里插入图片描述

在zkt-git-test上的hello.txt文件中加入zkt-git-test之后,重新拉去,显示如下

在这里插入图片描述

git branch --set-upstream 'local_branch' origin/remote_branch
显示不再支持
--set-upstream已经过时,需要用 新的命令 --set-upstream-to

在这里插入图片描述

8.5.修改本地仓库对应的远程仓库地址

当远程的仓库地址发生变化时,需要修改本地仓库对应的远程仓库的地址。主要应用在[工程迁移]过程中。

git remote set-url origin 远程仓库地址

在这里插入图片描述

8.6.标签管理

在项目开发过程中,当一个版本发布完成时,是需要对代码打上标签,便于后续检索。获取处于其他的原因,需要对某个提交打上特定的标签。

8.6.1.创建标签

git tag -a 标签名 -m '备注信息' 'commit_id'

-a 参数指定标签名, -m 添加备注信息, ‘commit_id’ 指定打标签的提交(某个版本号)。

8.6.2.查看所有标签

git tag // 查看本地仓库中的所有标签

8.6.3.查看具体标签信息

git show 标签名

在这里插入图片描述

8.6.4.删除本地标签

如果打的标签出错,或者不在需要某个标签,则可以删除它。

git tag -d 标签名

在这里插入图片描述

8.6.5.推送标签到远程仓库

打完标签以后,有需要推送到远程仓库。

//推送单个标签到远程仓库
git push origin 标签名
//一次性推送所有标签到远程仓库。
git push origin --tags

在这里插入图片描述

8.6.6.删除远程标签

git push origin :refs/tags/标签名
 
git push origin --delete 标签名
 
git push origin :标签名

在这里插入图片描述

8.7.临时保存修改

在执行很多的 Git 操作的时候,是需要保持当前操作的仓库/分支处于 clean 状态,及没有未提交的修改。如 git pull, git merge 等等,如果有未提交的修改,这些将无法操作。

但是做这些事情的时候,你可能修改了比较多的代码,却又不想丢弃它。那么,你需要把这些修改临时保存起来,这就需要用到 git stash。

8.7.1.临时保存修改

临时保存修改,这样仓库就可以回到 clean 状态。

git stash // 保存本地仓库中的临时修改。

注意:可以多次的 git stash 来保存不同的临时修改。
在这里插入图片描述

保存之后,仓库回到clean状态,目前在工作区、暂存区的已经没有了,被暂时保存起来了。

8.7.2.查看临时保存

当你临时保存以后,后面还是要取回来的,那它们在哪里呢?

git stash list // 显示所有临时修改

在这里插入图片描述

8.7.3.恢复临时保存

当我们处理完其他操作时,想要恢复临时保存的修改。

git stash apply        // 恢复所有保存的临时修改
git stash pop        // 恢复最近一次保存的临时修改

在这里插入图片描述

8.7.4.丢弃临时保存

我们后面觉得临时保存不想要了,那可以丢弃它。

git stash clear // 丢弃所有保存的临时修改

在这里插入图片描述

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

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

相关文章

渐进式云渲染和模块式云渲染:二者的区别与选择

云渲染是一种利用云计算技术,将本地的渲染任务分配到远程的服务器上进行高效、快速、低成本的渲染的服务。云渲染可以帮助用户节省时间、资金和硬件资源,提高工作效率和质量。但是,在使用云渲染时,用户需要面对一个重要的选择&…

unable to write symref for HEAD: Permission denied

今天从gitee上面克隆项目到本地时报错如下 warning: unable to unlink ‘D:/IDEAcode/ruiji1.0/.git/HEAD.lock’: Invalid argument error: unable to write symref for HEAD: Permission denied 解决方法:将要存放项目的文件夹权限修改为完全控制 原先权限&…

Unity游戏源码分享-乐节奏休闲游戏源码 guitar hero 支持mobile

Unity游戏源码分享-乐节奏休闲游戏源码 guitar hero 支持mobile 完整版下载地址:https://download.csdn.net/download/Highning0007/88198766

tcl学习之路(四)(vivado设计分析)

1.FPGA芯片架构中的对象 在打开elaborated/synthesied/implemented的情况下,可使用如下命令获取期望的SLICE。SLICE分为SLICEL和SLICEM,由LUT、FF、MUX、CARRY组成。 set all_slice [get_sites SLICE*] set col_slice [get_sites SLICEX0Y*] set all_sl…

Golang bitset 基本使用

安装: go get github.com/bits-and-blooms/bitset下面代码把fmtx换成fmt就行 //------------基本操作------------//构建一个64bit长度的bitsetb : bitset.New(64)//放入一个数b.Set(10)fmtx.Println("add-10:", b.DumpAsBits()) // 0000000…

HttpRunner搭建接口自动化测试项目

前言:前面写过一篇PytestAllure接口自动化测试框架搭建的博客,这篇博客学习另外一款优秀的开源的接口自动化测试框架:HttpRunner,本博客主要学习如何搭建基于HttpRunner的接口自动化测试项目 PytestAllure接口自动化测试框架搭建…

11款UML/SysML建模工具更新(2023.7)Papyrus、UModel……

DDD领域驱动设计批评文集 欢迎加入“软件方法建模师”群 《软件方法》各章合集 最近一段时间更新的工具有: 工具最新版本:drawio-desktop 21.6.5 更新时间:2023年7月22日 工具简介 开源绘图工具,用Electron编写,…

【office】world设置标题

这里写目录标题 一、整理样式库二、设置标题编号三、设置标题其它信息1.设置 标题 1a.设置字体b.设置边框c.设置段落 2.设置 标题 2a.设置字体b.设置边框 3.设置 标题 3a.设置字体b.设置边框 4.设置 标题 4a.设置字体 5.设置 标题 5a.设置字体 一、整理样式库 1.选择“开始” …

【腾讯云 Cloud Studio 实战训练营】提升开发效率与协作:探索腾讯云 Cloud Studio 的强大功能与优势

文章目录 一、前言二、认识腾讯云 Cloud Studio2.1 什么是云端开发环境2.2 CDE 的特点与优点2.2.1 提高效率,开发环境一键运行2.2.2 提高生产力,可以并行的工作2.2.3 开发更加规范2.2.4 提供监管,降低资本与资源 2.3 云端开发环境具备的四大要…

【算法|双指针系列No.2】leetcode1089. 复写零

个人主页:平行线也会相交 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望…

部署模型并与 TVM 集成

本篇文章译自英文文档 Deploy Models and Integrate TVM tvm 0.14.dev0 documentation 更多 TVM 中文文档可访问 →Apache TVM 是一个端到端的深度学习编译框架,适用于 CPU、GPU 和各种机器学习加速芯片。 | Apache TVM 中文站 本节介绍如何将 TVM 部署到各种平台&…

MediaUni——面向未来的流媒体传输网络设计与实践

// “立足当下,着眼未来”,任何一位从业者都应该谨遵这样的格言。阿里云通过总结这么多年的流媒体传输服务,分析痛点、提出措施、改进技术、认真思考,带来了MediaUni这样一个面向未来的流媒体传输网络。LiveVideoStackCon2023上…

接口幂等性实现方式

优质博文:IT-BLOG-CN 幂等 操作的特点是一次和多次请求某一个资源对于资源本身应该具有同样的结果(网络超时等问题除外)。幂等函数或幂等方法是指可以使用相同参数重复执行,并能获得相同结果的函数。这些函数不会影响系统状态&am…

最小公倍数题解:湘大oj1075 辗转相除法

一、链接 求最小公倍数 二、题目 Description 有多个测试用例,每行两个正整数x,y,保证x*y不超过2^31-1。如果x与y都为0,则输入结束。 每行输出一个测试用例的结果,即x与y的最小公倍数。(最后一行有回车)…

软著是什么

因公司需要申请软著,提前将相关资料整理如下,方便查询。 一、是什么 作为一名软件开发者,了解软件著作权可以帮助我们保护创作的成果,确保其他人不会未经授权地使用我们的代码。如果你要在你的软件中使用其他人的代码&#xff0…

百度Apollo中轨迹的表示方式

本文只是对于初学者的一种直观普及,以及对于规划路径可视化的另外一种体会。对于做规划控制的工程师来说太简单。只是本人初学者,在学习控制模块时候对于模块输入参数有所迷惑。所以记录一下。 首先明确轨迹表达的方式,以及对于控制模块输入的…

【C# 基础精讲】数组的创建与操作

数组是C#编程中非常重要的数据结构,它是一种用于存储相同类型元素的集合。通过数组,我们可以方便地访问和处理多个相关数据,这在很多编程场景下都是非常有用的。本文将详细介绍C#数组的创建与操作,包括数组的声明、初始化、访问元…

.bit域名调研

.bit域名研究 问题: .bit域名和ENS域名的相同点?不同点?有什么关系? .bit的定义 .bit 是基于区块链的,开源的,跨链去中心化账户系统.bit 提供了以 .bit 为后缀的全局唯一的命名体系,可用于加密…

半导体器件||的学习

电子管的介绍: 到底什么是电子管(真空管)? - 知乎 芯片破壁者(一):从电子管到晶体管“奇迹”寻踪 - 知乎 晶体管: 什么是晶体管?它有什么作用? - 知乎 改…

Fastjson 使用指南

文章目录 Fastjson 使用指南0 简要说明为什么要用JSON?用JSON的好处是什么?为什么要用JSON?JSON好处 1 常用数据类型的JSON格式值的范围 2 快速上手2.1 依赖2.2 实体类2.3 测试类 3 常见用法3.1 序列化操作核心操作对象转换为JSON串list转换J…