日常开发中Git命令指北

news2024/11/23 12:36:39

Git基本操作

创建化仓库

mkdir 目录
cd 目录
git init

配置本地仓库

# 配置用户名,邮箱
git config user.name "cxf"
git config user.email "1969612859@qq.com"
# 查看本地配置(小写的 L)
git config -l
# 重置配置(如果出现多个值,则需要使用 --unset-all)
git config --unset user.name
git config --unset user.email
# 全局配置。一台服务器上可以创建多台本地仓库,当前机器所有git仓库都生效
git config --global user.name "cxf"
git config --global user.email "1969612859@qq.com"
# 查看日志
# git log
git log --pretty=oneline

添加/取消文件

# 添加单个文件到暂存区(索引)
git add xxx文件
# 添加多个文件到暂存区(索引)
git add xxx文件1 xxx文件2 xxx文件3
# 取消暂存区单个文件
git reset xxx文件1
# 取消暂存区多个文件
git reset xxx文件1 xxx文件2 xxx文件3
git commit -m "xxx信息"

查看 .git文件

tree .git/

在这里插入图片描述

cat .git/refs/heads/master

在这里插入图片描述

存储的就是索引

修改文件

# 查看状态
git status
# 比对前后内容差异
git diff xxx文件

在这里插入图片描述

diff --git a/ReadMe b/ReadMe(a代表改变前,b代表改变后)
— a/ReadMe(–代表之前)
+++ b/ReadMe(++代表之后)
@@ -1 +1,2 @@(-1:改变前的第一行,+1改变后的第一行开始,直到第二行结束)
hello git(原来的内容)
+hello word(修改后新增的内容)

版本回退

回退的是版本库的内容

  1. soft:回退版本库
  2. mixed:回退版本库,暂存区
  3. hard:回退版本库,暂存区和工作区
工作区暂存区版本库本质是回退的版本库的内容
git worldgit worldgitgit --soft
git worldgitgitgit --mixed(默认)
gitgitgitgit --hard(慎用)

可以根据版本ID进行回退

# 根据版本号回退
git reset --hard 版本ID
# 回退到当前版本
git reset --hard HEAD
# 回退到当前版本的上一个版本
git reset --hard HEAD^
# 回退到当前版本的上两个版本
git reset --hard HEAD^^

在这里插入图片描述
当回退之后版本号也就会跟着消失,如果回退错了想回退到回退之前版本可以使用 reflog

git reflog

在这里插入图片描述
我们再回退到已经回退的 hello world 版本
在这里插入图片描述

撤销修改

背景:开发三四天代码,但一直没有执行 add 操作。此时我们如果要回退的话,就需要将新增的代码进行删除。

前提是: commit 之后没有 push

git diff xxx文件

在这里插入图片描述
此时我们知道了绿色的字体就是我们新增的代码,但如果工程量很大的时候一行一行的删除代码会出BUG而且效率低下。
因此我们如果没有 add 操作可以使用 checkout 操作进行撤销更改

git checkout -- xxx文件

在这里插入图片描述

工作区自动回退到最近一次文件的修改
在这里插入图片描述
如果不加上 则会使切换分支或者检出特定的提交(也就是将某次commit的状态检出到工作区,即从head指向某个分支最近的一次commit,再从commit回到index,再从index恢复到工作区)

工作区暂存区版本库解决方式
xxx code1.不推荐手动撤销 2.推荐checkout
xxx codexxx codegit reset
xxx codexxx codexxx codegit reset

删除文件

删除需要3步

# 删除文件
rm file3
# 添加到暂存区
git add file3
# 提交到版本库
git commit -m "del file3"

在这里插入图片描述
有一个优化的两步版本

git rm xxx
git commit -m "xxx"

在这里插入图片描述

Git分支管理

HEAD 可以指向其它分支

# 创建新分支
git branch xxx
# 查看本地仓库分支(*标记当前所在分支)
git branch(tree .git/refs/heads)
# 查看本地和远程仓库全部分支
git branch -a
# 切换分支
git checkout xxx
# 合并:在分支上完成一些修改之后再切换到主分支执行合并分支(master作为主分支,dev作为其它分支,那么就应该切换到master在进行合并dev分支)
git merge xxx
# dev分支被合并之后就可以删掉(如果当前在dev分支的话处于占用状态就无法删除)
git branch -d dev

每次合并之后主分支master将用dev分支提交的ID
在这里插入图片描述

合并冲突

在这里插入图片描述

# 创建并切换分支
git checkout -b dev1
# 查看分支
git branch
# 保存操作(.代表当前全部文件由于只修改了ReadMe,所以支队ReadMe有效果)
git add .
git commit -m "md ReadMe:bbb"
git checkout master
git merge dev1

然后就会出现以下错误
在这里插入图片描述
这个时候我们要手动处理,全保留或者删除部分。这里保存dev1分支内容
在这里插入图片描述
查看一下状态
在这里插入图片描述
我们就正常的进行 add和commit 操作之后我们看一下版本号发现最后一次提交的版本号就是我们的master版本号
在这里插入图片描述
在这里插入图片描述

# 查看分支信息
git log --graph --abbrev-commit

在这里插入图片描述

合并模式

在之前合并dev分支之后,历史记录也会跟着消失。此时我们就无法知道此时的代码到底是 merge 进来的还是 master 自己生成的。

# 合并分支
git merge dev2

在这里插入图片描述

# 合并分支(这确保了要合并的分支在提交历史中清晰可辨)
git merge --no-ff -m "merge dev2" dev2
# 查看历史纪录
git log --graph --abbrev-commit

在这里插入图片描述

BUG分支

背景:如果在 开发分支 上修改BUG,如果修出了更大的BUG则会对线上环境造成更大的影响,因此更好的方法是 新建分支进行修改BUG
在这里插入图片描述

# 在dev2分支上进行开发(需要修改dev2的BUG)
git branch -b dev2
# 将dev2工作区的内容剪切到stash中
git stash
# 切换到master主分支进行分支创建
git checkout master
# 在master分支上创建并选择fix_bug分支
git checkout -b fix_bug
# 切换到master主分支
git checkout master
# master合并fix_bug
git merge --no-ff -m "merge fix_bug" fix_bug
# master的BUG修复完毕再切换到dev2分支进行开发
git checkout dev2
# 查看stash存储的内容
git stash list
# 将stash空间里的代码恢复到dev2分支上
git stash pop
# dev2代码开发完成之后再进行提交
git add .
git commit -m "md ReadMe:Done"
# 将dev2新功能合并到master分支上【此时会出现问题,因为master分支上已经修复好了bug而dev2上的bug未修复又开发了新功能】
# 较好地解决方法就是:dev2先合并master分支,这样不会破坏主分支;在master合并dev2分支,这次合并分支就不会出现冲突
git merge --no-ff -m "merge master" master
# 切换到master分支
git checkout master
# 合并dev2分支
git merge --no-ff -m "merge dev2" dev2
# 删除不用的分支
git branch -d fev2 fix_bug

强制删除分支

# 删除分支【当commit提交之后就无法删除】
git branch -d xxx分支
# 强制删除分支【当commit提交之后依旧可以删除】
git branch -D xxx分支

Git远程操作

在这里插入图片描述

克隆远程仓库

HTTPS

在这里插入图片描述

# HTTPS 克隆下载
git clone https://gitee.com/chenxfwtbu/remote-gitcode.git
# 显示每个远程仓库和其地址
git remote -v

在这里插入图片描述
origin: 是远程仓库的默认名称。用于远程和本地仓库之间的推送或拉取,通过该名称就可以获取远程仓库地址
master: 是Git本地仓库默认分支的名称。master分支是最主要的分支,其它分支从master分支上派生。可以在master分支上合并,提交等操作以便管理员管理更新代码

SSH

配置 .ssh 目录下的私钥和公钥【非对称加密】
在这里插入图片描述

# rsa算法生成私钥【公钥保存在id_rsa.pub文件中】
ssh-keygen -t rsa -C "自己Gitee的邮箱地址"
# rsa生成一个4096位的密钥对
ssh-keygen -t rsa -b 4096 -C "自己Gitee的邮箱地址"
# ed25519算法生成私钥【公钥保存在id_ed25519.pub中】
ssh-keygen -t ed25519 -C "自己Gitee的邮箱地址"

如果对安全性没有别要求的话使用默认的 rsa算法 非对称加密也行,但 ed25519 算法可以更快的速度生成密钥对,咱用更少的存储空间并且提供和rsa算法相当的安全性,因此ed25519也用的越来越多

在这里插入图片描述
然后再复制粘贴生成的公钥到Gitee码云
在这里插入图片描述
在执行clone操作
在这里插入图片描述

# SSH 克隆仓库
git clone git@gitee.com:chenxfwtbu/remote-gitcode.git

向远程仓库推送

# 先查看本地仓库配置项
git config -l
# 先配置用户名和邮箱
git config user.name "chenxfwtbu"
git config user.email "1969612859@qq.com"

在这里插入图片描述
在这里插入图片描述

# 推送
git push 远程仓库名称 本地分支名称:远程分支名称
# 如果远程和本地仓库的主分支都一样的话可以省略掉 :master
git push origin master

在这里插入图片描述

拉取远程仓库

git pull 远程仓库名 远程分支名:本地分支名
# 如果远程和本地分支名一样的话可以省略
git pull origin master

在这里插入图片描述

pull:相当于拉取+合并

忽略特殊文件

在日常开发过程中有些文件不想或者不应该上传的远端【保存了数据库密码的文件】。可以在 Git工作区 目录下创建一个 .gitignore 文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件
在这里插入图片描述

# 如果需要强制让某些文件添加需要加上 -f 参数(但一般不破坏.gitignore规则)
git add -f b.so
# 也可以把排除的文件名前加一个 !

在这里插入图片描述

# 当配置文件很多行的时候,可以查看被排出的原因【第三行的*.so将c.so排除在外】
git check-ignore -v d c.so

在这里插入图片描述

配置命令别名

# 将命令缩短进行简写
git config alias.缩写 "命令"

在这里插入图片描述

标签管理

标签 tag,可以简单理解为对某一次 commit 的一个表示,相当于起了个别名。

项目发布某个版本的时候,针对最后一次 commit 起一个 v1.0 这样的标签来识别里程碑的意义。相较于难记的 commit idtag 可以很好的让使用者快速回退到某个版本【域名和IP地址的关系】

操作标签

# 为最后一次commit打标签
git tag 标签
# 查看全部标签
git tag
# 为指定的一次提交打标签
git tag 标签 commit id
# 注释标签
git tag -a v0.8 -m "import tag:XXX" 
# 查看注释标签
git show 标签名
# 修改标签(不能直接修改,而是删除重建)
git tag -d 标签名

在这里插入图片描述

会将最后一次提交的commit id记录在标签v1.0的文件中

在这里插入图片描述

为指定的提交打标签
在这里插入图片描述

推送标签

在这里插入图片描述
在最开始,Gitee上没有标签,需要我们手动推送才可以

# 推送指定标签
git push 远程仓库名 标签名
# 推送全部标签
git push 远程仓库名 --tags

在这里插入图片描述
远程仓库中的标签删除建议在网页上操作
在这里插入图片描述
本地标签删除操作如下

# 删除指定标签
git tag -d 标签名
# 将删除的标签推送到远程
git push 远程仓库名 :标签名

在这里插入图片描述
在这里插入图片描述

多人协作

完成准备工作

在这里插入图片描述

# 拉取远程全部内容【之前是拉取远程的master主分支内容】
git pull

在这里插入图片描述
Ubuntu下开发者1

# 创建本地分支并和远程分支关联
git checkout -b 本地分支名称 远程仓库名/远程分支名
# 查看建立的连接
git branch -vv
# 开发者1aaa
vim file.txt
# 添加
git add .
# 提交
git commit -m "md fiile.txt:aaa"
# 推送(由于已经建立关联,也可以直接git push)
git push origin dev:dev

Win下开发者2

# 创建本地分支
git checkout -b dev
# 本地分支关联远程分支
git branch --set-upstream-to=origin/dev dev
# 开发者2bbb
vim file.txt
# 添加
git add .
# 提交
git commit -m "md filex.txt:bbb"
# 推送
git push origin dev:dev

在这里插入图片描述
发现抱错。原因:win下载的时候dev分支和远程origin/dev分支中,file.txt有差异导致的。因此我们需要 pull 一下:将远程分支的内容拉下来解决本地冲突之后再推送给远程

# 拉取远程全部内容而不是部分分支内容
git pull
# 手动修改一下file.txt文件即可
# 添加
git add .
# 提交
git commit -m "merge dev"

在这里插入图片描述
查看一下远程仓库,发现已经dev上两个开发者已经完成了代码的修改和发布
在这里插入图片描述

将内容合并进master

在这里插入图片描述

此时对于开发者1和2的功能还没有合并到master主分支。需要继续以下流程:

  1. PR合并申请单
  2. 管理员审批
  3. merge

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
开发者1和2谁merge都可以,这里我们就以开发者1来merge做模拟

# dev和master分支获取最新的远程仓库代码
git pull
# 为了防止遗漏,切换到master分支继续拉取一下
git checkout master
git pull
# 然后再切换到dev分支
git checkout dev
# dev分支合并master分支(git merge --no-ff -m "merge master" master报错原因:快进模式和非快进模式合并会无法合并)
git merge master
# 切换到master分支
git checkout master
# 合并dev分支
git merge dev
# 删除dev分支
git branch -d dev
# 推送
git push

最后总结一下流程

  1. git push 远程仓库名 分支名 推送自己的修改
  2. 如果推送失败,则因为远程分支比本地更新,需要先用 git pull 试图合并
  3. 如果合并有冲突,则解决冲突并在本地提交
  4. 没有冲突或者解决冲突后,再用 git push 远程仓库名 分支名 推送就能成功
  5. 功能开发完毕,将分支合并到 master 分支最后删除分支

案例2
这一套非常方便,不会有冲突。因此大多数一个功能一个分支
在这里插入图片描述
开发者1

# 本地创建分支
git checkout -b feature-1
# 开发function1
vim function1
git add .
git commit -m "add function1"
# 这里不关联,因为远程没有创建对应分支
git push origin feature-1
# 查看远程分支信息
git branch -a

开发者2

# 本地创建分支
git checkout -b feature-2
# 开发function1
vim function2
git add .
git commit -m "add function2"
# 这里不关联,因为远程没有创建对应分支
git push origin feature-2
# 查看远程分支信息
git branch -a

案例3
在这里插入图片描述
开发者1

# 获取feature-2分支
git pull
# 本地创建feature-2分支(上文中用的 --set-upstream-to=origin/dev关联的)
git checkout -b feature-2 origin/feature-2

git pull

1.拉取分支内的内容
2.拉取的仓库的内容

开发者2

# 先建立远程和本地分支的链接
git branch --set-upstream-to=origin/feature-2 feature-2
# 开发
# 添加
git add .
# 提交
git commit -m "md func2"

在这里插入图片描述

# 切换到master分支
git checkout master
# 拉取远程仓库
git pull
# 切换到feature-1
git checkout feature-1
# 合并master分支(为了预防冲突,不直接在master分支上合并)
git merge master

如果没有冲突就会跳出这个页面(ctr+x离开)
在这里插入图片描述
本地的feature-1分支没有关联远程分支
在这里插入图片描述

# 将本地分支链接远程分支(也可以直接推送对应分支信息就可以自动生成)
git push origin feature-1

在这里插入图片描述
我们最后远程仓库删除分支之后但是本地 git branch -a 依旧能够看到的解决办法
在这里插入图片描述
在这里插入图片描述

# 获取远程仓库信息
git remote show origin
# 修建仓库分支
git remote prune origin

在这里插入图片描述

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

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

相关文章

C语言函数详解(1)

目录 函数是什么 C语言中函数的分类 库函数 自定义函数 函数的参数 实际参数(实参) 形式参数(形参) 函数的调用 传值调用 传址调用 练习 函数的嵌套调用和链式访问 嵌套调用 链式访问 函数是什么 数学中我们常见到函…

【链表OJ 2】反转链表

前言: 🎈欢迎大家来到Dream_Chaser~的博客🎈 🚩本文收录于 C--数据结构刷题的专栏中 -->http://t.csdn.cn/n6UEP 首先欢迎大家的来访,其次如有错误,非常欢迎大家的指正,互相学习进步。 一.反转链表 来…

【高危】 Microsoft Exchange Server 远程代码执行漏洞

漏洞描述 Microsoft Exchange Server 是微软公司开发的一款邮件服务器。 Microsoft Exchange Server 受影响版本中,具有普通用户权限(Exchange 用户凭据)的攻击者可能在同一内网环境中攻击Exchange服务,远程执行任意代码。 由于…

【学习】若依源码(前后端分离版)之 “ 上传图片功能实现”

大型纪录片:学习若依源码(前后端分离版)之 “ 上传图片功能实现” 前言前端部分后端部分结语 前言 图片上传也基本是一个项目的必备功能了,所以今天和大家分享一下我最近在使用若依前后端分离版本时,如何实现图片上传…

Oracle到DM实时数据同步实施方案

目录 1 项目概述 2 需求分析 3 实施操作 3.1 历史数据全量同步 3.2 增量数据实时同步 4 问题总结 4.1 字符型非空约束 4.2 字符型唯一索引尾部空格 1 项目概述 将Oracle 11g RAC生产环境数据同步到DM8分析环境,Oracle数据库大小1.5T,日增归档10…

Windows和Linux系统上的矢量运算:指令级并行计算SIMD(SSE/AVX)应用细节以及相关跨平台的源码解释

注:本文的SIMD,指的是CPU(base intel x86 architecture)指令架构中的相关概念。不涉及GPU端的算力机制。下面的代码在Win10和Linux上均可用。 基本概念 SSE: Streaming SIMD Extensions, x86 architecture AVX: Advanced Vector Extensions SIMD&#…

vue项目中Uncaught runtime errors:怎样关闭

原文链接: yvue项目中Uncaught runtime errors:怎样关闭_笑毅的博客-CSDN博客https://blog.csdn.net/qq_36877078/article/details/131175355是webpack-dev-server弄出来的 解决办法 在vue.config.js中添加如下配置 module.exports defineConfig({...devServer:…

GDB 打印uint64位数据值

今天一来组长就让我查一个问题,说是我们的接口返回的数据需要赋值为-1,返回给上层调用。结果我一看代码,代码里就是写死了赋值 -1 的,但他说实际返回的好像不是 -1,所以只能让我gdb 跟踪一下了。本来想用 window 下的计…

[Linux]进程间通信(上篇)——匿名管道(管道原理,实现示例,端口情况探究!!)

hello,大家好,本篇文章介绍Linux进程间的通信,包含内容有进程间通信的介绍、理解,管道的介绍使用:匿名管道,匿名管道的实现示例,匿名管道端口4种情况的探究。 目录 1️⃣进程间通信 &#x1f…

ruby send call 的简单使用

refer: ruby on rails - What does .call do? - Stack Overflow Ruby使用call 可以调用方法或者proc m 12.method("") # > method gets the method defined in the Fixnum instance # m.class # > Methodm.call(3) #> 15 # 3 is passed inside the…

项目管理:四步帮你轻松制定计划

当项目经理接手一个项目的时候,做一个项目的日程安排是必须的,因为这是决定项目是否成功完成的最重要任务之一。 项目经理制定项目计划的步骤: 1、确定目标 项目目标极为关键,只有目标想清楚了,才可能正常开展后期…

选择CRM系统时需要有哪些功能?

企业在选型时,众多的CRM品牌是否让您挑花了眼?CRM客户管理系统哪个好用? 1、功能强大 Zoho CRM提供了从销售、市场营销、客服到项目管理、人力资源、财务等全方位的CRM功能,可以满足不同行业和规模的企业的需求。可以提供销售自…

Python(七十四)集合的数学操作

❤️ 专栏简介:本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中,我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 :本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…

产品管理经验分享:删掉 500 个产品待办事项后,我逃离了「假敏捷」

文章开始之前,我想先请大家思考几个问题: 你的产品待办列表中有多少项工作?其中最早的待办事项是什么时候创建的?你和 Scrum 团队多久会维护一次列表中那些从没进过迭代的「钉子户」事项? 我第一次问自己时&#xff0…

esp8266使用arduinoJson与tft_espi库发生冲突解决方法

esp8266使用arduinoJson与tft_espi库发生冲突解决方法 arduinoJson与tft_espi库发生冲突解决方法下载arduinoJson5.0版本的,不要用最新版本 示范代码: // Copyright Benoit Blanchon 2014 // MIT License // // Arduino JSON library // https://git…

AIGC创世计划设计视频课程

课程介绍 AIGC创世计划设计视频课程是一门专注于创意设计的课程。通过视频教学,学习者将了解到关于创意设计的理论知识和实践技巧,并能够运用这些知识和技巧进行创作。本课程涵盖了多个设计领域,包括平面设计、产品设计、UI/UX设计等。无论是…

C++,文本文件,写文件操作

代码演示&#xff1a; #include <iostream> using namespace std;//1、包含头文件 #include<fstream>void test() {//2、创建流对象ofstream ofs;//3、打开文件(默认源文件路径&#xff09;ofs.open("test.txt", ios::out);//4、写数据ofs << &qu…

Leetcode每日一题:1289. 下降路径最小和 II(2023.8.10 C++)

目录 1289. 下降路径最小和 II 题目描述&#xff1a; 实现代码与解析&#xff1a; 动态规划 原理思路&#xff1a; 1289. 下降路径最小和 II 题目描述&#xff1a; 给你一个 n x n 整数矩阵 grid &#xff0c;请你返回 非零偏移下降路径 数字和的最小值。 非零偏移下降路…

【Linux取经路】基础开发工具——gdb篇

文章目录 一、背景知识介绍二、gdb常用指令 一、背景知识介绍 程序的发布方式有两种&#xff0c;Debug模式和release模式。Debug是开发者模式&#xff0c;而用户最终使用的是release。Debug模式下的代码&#xff0c;可以被追踪、调试&#xff0c;因为在Debug模式下形成的可执行…

浪潮数字咨询专家孙崇虎受邀为第十二届中国PMO大会演讲嘉宾

浪潮数字企业技术有限公司集团管控事业部咨询专家孙崇虎先生受邀为由PMO评论主办的2023第十二届中国PMO大会演讲嘉宾&#xff0c;演讲议题&#xff1a;VUCA时代的项目管理信息化应对。大会将于8月12-13日在北京举办&#xff0c;敬请关注&#xff01; 议题简要&#xff1a; 当前…