【Git】Git使用(保姆级讲解)

news2024/11/15 14:02:10

1、第一次安装使用

git下载地址:https://git-scm.com/download

1.1 配置用户名、邮箱

​ 这是非常重要的,因为每次Git提交都会使用该用户信息。

设置

​ 在 git bash 输入以下命令。

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

查看信息

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

1.2 为常用指令配置别名(可选)

​ 可以简化每次输入过长的命令。

在用户目录中创建 .bashrc 文件

​ windows 系统下的用户目录位置:C:\Users\用户名

touch ~/.bashrc

使用 alias 命令:给命令取别名

​ 可以在 git bash 使用 vi/vim 编辑器编辑,也可以直接在本地打开编辑。

#用于输出git提交日志
alias git-log='git log --pretty=oneline --all --graph --abbrev-commit'
#用于输出当前目录所有文件及基本信息,ll命令本身等同于 ls -l
alias ll='ls -al'

生效

​ 在 windows 系统的家目录中创建的 .bashrc 不像 linux 系统那样,修改后不需要执行 source 命令进行生效,在 windows 系统下需要执行该命令

source ~/.bashrc

遇到的问题

​ 如果 ~/.bashrc 是第一次创建的话,重新打开 git bash 可能会显示下面的信息,不用理会,它只是在家目录新生成了一个 ~/.bash_porfile 文件。

2、新建本地仓库

在本地选择/创建一个空目录作为本地 Git 仓库

在 git bash 输入

git init

如果创建成功后可在文件夹下看到隐藏的 .git 目录。

3、基础操作指令

​ Git 工作目录下对于文件的修改(增加、删除、更新)会存在几个状态,这些修改的状态会随着我们执行 Git 的命令而发生变化。

​ 使用如下命令可以让文件在这三个状态间切换:

  • git add (工作区 --> 暂存区)
  • git commit (暂存区 --> 本地仓库)

3.1 查看修改的状态(status)

​ 作用:查看的修改的状态(暂存区、工作区)

git status

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

3.2 添加工作区到暂存区(add)

​ 作用:添加工作区一个或多个文件的修改到暂存区

git add 单个文件名|通配符

3.3 提交暂存区到本地仓库(commit)

​ 作用:提交暂存区内容到本地仓库的当前分支

git commit -m "注释内容"

3.4 查看提交日志(log)

​ 作用:查看提交记录

git log [option]

options

  • –all:显示所有分支
  • –pretty=oneline:将提交信息显示为一行
  • –abbrev-commit:使得输出的 commitId 更简短
  • –graph:以图的形式显示

​ 最好的查看效果就是将所有的选项全部选上,也就是前面给命令取别名的 git-log,即:

git log --pretty=oneline --all --graph --abbrev-commit

3.5 版本回退

​ 作用:版本切换

# commitID 可以使用 git-log 或 git log 指令查看
git reset --hard commitID
# 查看已经删除的提交记录
git reflog

3.6 添加文件至忽略列表(.gitignore文件)

​ 作用:把指定的文件无需纳入 Git 的管理中,也就是在执行 git addgit commit 都不会将这些文件放入到暂存区和仓库之中。

在工作目录中创建 .gitignore 文件

列出要忽略的文件模式

# 忽略所有以 .a 结尾的文件
*.a
# 一定要管理 lib.a 文件,即使上面忽略所有以 .a 结尾的文件
!lib.a
# 忽略当前目录下的 TODO 文件,子目录下的 TODO 文件照常管理
/TODO
# 忽略 build/ 目录下的所有文件
build/
# 忽略 doc/ 目录下所有以 .txt 结尾的文件,但子目录下的 .txt 文件照常管理
doc/*.txt
# 忽略 doc/ 目录下的所有 .pdf 文件(包括子目录)
doc/**/*.pdf

3.7 可能遇到的问题

(1)将工作区保存到暂存区(add 命令):

链接

warning: LF will be replaced by CRLF in xxx.
The file will have its original line endings in your working directory

原因:文件中换行符的差别导致的。这个提示的意思是说:会把windows格式(CRLF(也就是回车换行))转换成Unix格式(LF),这些是转换文件格式的警告,不影响使用。git默认支持LF。windows commit 代码时 git 会把 CRLF 转 LF,update 代码时 LF 换 CRLF。

解决方法

git rm -r --cached .
git config core.autocrlf false
git add .
git commit -m ""

4、分支管理

​ 分支作用:可以把的工作从开发主线上分离开来进行重大的 Bug 修改、开发新的功能,以免影响开发主线。

4.1 查看本地分支

git branch

4.2 创建本地分支

git branch 分支名

4.3 切换分支(checkout)

git checkout 分支名
# 接切换到一个不存在的分支(创建并切换)
git checkout -b 分支名

4.4 合并分支(merge)

​ 一个分支上的提交可以合并到另一个分支

git merge 分支名称

4.5 删除分支(branch -d/D)

不能删除当前分支,只能删除其他分支

# 删除分支时,需要做各种检查
git branch -d b1
# 不做任何检查,强制删除
git branch -D b1

4.6 合并冲突

发生冲突的原因一般是两个分支对同一文件做出了不同的修改,Git 无法判断要如何进行修改,于是就将判断权交给用户,让用户进行修改。

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

4.7 使用示例

(1)在 master 分支创建了 aaa.txt 空文件,并执行 add 和 commit 命令将其保存到本地仓库中,并将该操作备注为 “创建 aaa.txt 文件”。

在这里插入图片描述

(2)新创建一个 child_1 子分支,该子分支的进度与 master 分支一致。

在这里插入图片描述

(3)在 child_1 子分支中修改 aaa.txt 内容,并保存到本地仓库中,并将该操作备注为 “修改 aaa.txt 文件”。可以看到 master 分支的进度还处于创建 aaa.txt 文件阶段,而在 child_1 分支中则多了个修改 aaa.txt 文件的操作。

(4)提交后转回到 master 分支,证实了(3)所说的,在 child_1 子分支上提交的修改后的 aaa.txt 文件在 master 分支上并未存在,还是处于空白状态

(5)在 master 分支再次创建一个 child_2 子分支,发现 child_2 分支也继承了 master 分支的进度。

(6)在 child_2 子分支在创建一个 bbb.txt 文件,并进行修改,分别各自执行 add 和 commit 命令将其保存到本地仓库中。

(7)再次返回到 master 分支,创建并修改一个 ccc.txt 文件,保存到本地仓库中。

(8)将 child_1 子分支和 child_2 子分支分别合并到 master 分支当中去。

(9)对比(7)、(8)的三幅图,可以得知最重要的几个结论:

  • 红色线:master 主分支没有实现的步骤。
  • 绿色线:master 主分支已经实现的步骤。
  • * 号:该分支所实现的步骤。
  • 缩进:master 主分支没有缩进,子分支在父分支的基础上进行一个缩进(以 * 号为标准)。

5、远程仓库

5.1 添加远程仓库(remote add)

​ 操作之前要先在 github/gitee 创建一个新的仓库。

git remote add <远端名称> <仓库路径>
  • 远端名称:默认是 origin,取决于远端服务器设置。
  • 仓库路径:从远端服务器获取此 URL。

5.2 配置SSH公钥

# 生成 ssh 公钥,不断回车即可(如果之前生成过的视情况是否需要覆盖原来的公钥)
ssh-keygen -t rsa
# 获取公钥
cat ~/.ssh/id_rsa.pub

Gitee 设置账户公钥

验证是否配置成功

ssh -T git@gitee.com

5.3 查看远程仓库(remote)

git remote

5.4 推送到远程仓库(push)

注:在推送之前要将文件保存到本地仓库中。

git push [-f] [--set-upstream] [远端名称 [本地分支名][:远端分支名] ]
# 如果远程分支名和本地分支名称相同,则可以只写本地分支
git push origin master
# 该语句的意思是将本地仓库的 master 分支推送到远程仓库的 master 分支,该语句等同于上面那条语句
git push origin master:master
  • -f:表示强制覆盖。
  • –set-upstream:推送到远端的同时并且建立起和远端分支的关联关系,此时就可以使用 git push 命令直接进行推送了,无需指定分支名。
# 查看本地分支与远程分支的关联关系
git branch -vv

5.5 从远程仓库克隆(clone)

git clone <仓库路径> [本地目录]
  • 本地目录可以省略,会自动生成一个目录

5.6 从远程仓库中抓取(fetch)

git fetch [remote name] [branch name]
git merge 分支名称
  • 抓取指令就是将仓库里的更新都抓取到本地,不会进行合并
  • 如果不指定远端名称和分支名,则抓取所有分支。

5.7 从远程仓库中拉取(pull)

git pull [remote name] [branch name]
  • 拉取指令就是将远端仓库的修改拉到本地并自动进行合并,等同于 fetch + merge
  • 如果不指定远端名称和分支名,则抓取所有并更新当前分支。

5.8 推送/拉取冲突

​ 在多人协作时,很可能会遇到如下问题:

  • 在将 A 文件推送(push)到远程仓库时发现有人已经对 A 文件进行了修改,并且修改的内容与你本地的 A 文件不一致,推送被阻止。

  • 你修改 A 文件很长时间了,还没有修改完,但是想看其他人是否有对该文件进行了其他的修改,于是执行了拉取(pull),发现确实是有人对其了修改,拉取被阻止。

​ 那要如何得知其他人所做的修改呢?也就是如何解决该冲突呢?

​ 在前面的命令可以得知,如果在合并分支的时候发现相同文件不一致,会在该文件中标注出来冲突的位置,让用户自行选择需要保留哪个内容。这里也是如此,要使用抓取(fetch) + 合并分支(merge)命令解决该问题

5.9 可能遇到的问题

(1)推送/抓取时的报错:

链接

原因:本地仓库与远程仓库的内容不一致导致的(远程仓库有一些内容本地没有,或者是相同文件的不同内容)。

解决办法
如果想要强行提交

git push -f origin master

如果想要强行拉取

git pull origin master --allow-unrelated-histories

(2)每次推送到远程仓库需要输入账户密码:

链接

git: 'credential-manager' is not a git command. See 'git --help'.

解决办法

git config --global credential.helper store
# 再次进行推送
git push origin master
# 输入账号密码后下次就不用输入了

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

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

相关文章

CV学习笔记-ResNet

ResNet 文章目录ResNet1. ResNet概述1.1 常见卷积神经网络1.2 ResNet提出背景2. ResNet网络结构2.1 Residual net2.2 残差神经单元2.3 Shortcut2.4 ResNet50网络结构3. 代码实现3.1 Identity Block3.2 Conv Block3.3 ResNet网络定义3.4 整体代码测试1. ResNet概述 1.1 常见卷积…

【三维几何学习】MeshCNN: A Network with an Edge

MeshCNN引言一、方法简述1.1 输入1.2 卷积1.3 池化二、实验分析三、改进以及应用引言 MeshCNN是第一个将网格简化引入到池化操作中的网络&#xff1a;合并顶点降低网格分辨率&#xff0c;类似图像中的平均池化。 主页1:https://ranahanocka.github.io/MeshCNN/ 比较详细的讲解…

Java 练习题:输出纯素数

文章目录纯素数简介任务要求思路解析源码奉上运行效果总结纯素数简介 所谓纯素数就是该数本身不仅是素数&#xff0c;并且该数的每一位都是素数。 例如&#xff1a;23,37是纯素数&#xff0c;但13,29不是。 任务要求 输出55555内所有的纯素数&#xff0c;按每行20个的格式化…

JVM 学习(2)—简单理解Java 四大引用(强、软、弱、虚)

一、Java 引用概述 Java 中出现四种引用是为了更加灵活地管理对象的生命周期&#xff0c;以便在不同场景下灵活地处理对象的回收问题。不同类型的引用在垃圾回收时的处理方式不同&#xff0c;可以用来实现不同的垃圾回收策略。Java 目前将其分成四类&#xff0c;类图如下&…

彻底搞懂inner join,left join,right join

1.inner join A inner join B where 条件&#xff0c; 对于A表中的每一行都会去B表的所有行去查找&#xff0c;去匹配&#xff0c;符合条件的就将这两行连接起来 下面用一个例子来帮助实际理解这句话&#xff1a; 创建下面两个表&#xff0c;customers表orders表 输入以下s…

银行软件测试面试题目总结,希望可以帮到你

目录 一、根据题目要求写出具体LINUX操作命令 二、JMETER题目 三、根据题目要求写出具体SQL语句 总结感谢每一个认真阅读我文章的人&#xff01;&#xff01;&#xff01; 重点&#xff1a;配套学习资料和视频教学 一、根据题目要求写出具体LINUX操作命令 1、分别写出一种…

HTML标签——列表标签 之 自定义列表

HTML标签——列表标签 之 自定义列表 目录HTML标签——列表标签 之 自定义列表一、 场景&#xff1a;在网页的底部导航中通常会使用自定义列表实现。二、标签组成&#xff1a;三、案例实操四、运行效果五、显示特点&#xff1a;六、注意点&#xff1a;七、小结一、 场景&#x…

DeepPath: A Reinforcement Learning Method forKnowledge Graph Reasoning

Innovation使用RL学习KG中的关系路径推理使用Supervised Policy Learning解决&#xff1a;KG中关系图大&#xff0c;如试错训练RL&#xff0c;难以收敛使用双向路径搜索&#xff0c;减少中间节点数量IntroductionPRA是一种学习推理路径的方法&#xff0c;使用基于RandomWalk的重…

智能语音信息处理团队18篇论文被语音技术顶会ICASSP 2023接收

近日&#xff0c;ICASSP 2023会议发出了审稿结果通知&#xff0c;语音及语言信息处理国家工程研究中心智能语音信息处理团队共18篇论文被会议接收&#xff0c;论文方向涵盖语音识别、语音合成、话者识别、语音增强、情感识别、声音事件检测等&#xff0c;各接收论文简介见后文。…

FreeRTOS入门(05):事件组

文章目录目的基础说明相关函数使用演示总结目的 事件组是RTOS中相对常用的用于任务间交互的功能&#xff0c;这篇文章将对相关内容做个介绍。 本文代码测试环境见前面的文章&#xff1a;《FreeRTOS入门&#xff08;01&#xff09;&#xff1a;基础说明与使用演示》 基础说明…

华为OD机试模拟题 用 C++ 实现 - 寻找连续区间(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 最多获得的短信条数(2023.Q1)) 文章目录 最近更新的博客使用说明寻找连续区间题目输入输出示例一输入输出说明示例二输入输出Code使用说明 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率…

嵌入式环境配置—VMware 软件安装和虚拟机的创建

目录 一、VMware软件的安装 二、虚拟机的创建 三、Linux操作系统的安装 VMware软件的安装 为什么要虚拟机? 嵌入式Linux开发需要在Linux系统下进行&#xff0c;我们选择了Ubuntu。 1.双系统安装 有问题&#xff0c;一次只能使用一个系统。Ubuntu基本只做编译用。需求&…

Qt之QTableView自定义排序/过滤(QSortFilterProxyModel实现,含源码+注释)

一、效果示例图 1.1 自定义表格排序示例图 本文过滤条件为行索引取余2等于0时返回true&#xff0c;且从下图中可以看到&#xff0c;奇偶行是各自挨在一起的。 1.2 自定义表格过滤示例图 下图添加两列条件&#xff08;当前数据大于当前列条件才返回true&#xff0c;且多个列…

美团前端常见vue面试题(必备)

v-model 是如何实现的&#xff0c;语法糖实际是什么&#xff1f; &#xff08;1&#xff09;作用在表单元素上 动态绑定了 input 的 value 指向了 messgae 变量&#xff0c;并且在触发 input 事件的时候去动态把 message设置为目标值&#xff1a; <input v-model"sth…

Java程序设计基础学习笔记——类与对象、方法、递归、重载、可变参数、作用域、构造器、this

以下笔记整理自B站UP主韩顺平【零基础 快速学Java】韩顺平 零基础30天学会Java课程OOP面向对象程序设计(Object Oriented Programming)类就是数据类型&#xff0c;有属性和行为&#xff1b;对象是一个具体的实例从类到对象&#xff0c;目前有几种说法&#xff1a;创建一个对象实…

【网络安全入门】零基础小白必看!!!

看到很多小伙伴都想学习 网络安全 &#xff0c;让自己掌握更多的 技能&#xff0c;但是学习兴趣有了&#xff0c;却发现自己不知道哪里有 学习资源◇瞬间兴致全无&#xff01;◇ &#x1f604;在线找人要资料太卑微&#xff0c;自己上网下载又发现要收费0 &#x1f643;差点当…

HttpRunnerManager部署

基于HttpRunner的接口自动化测试平台: HttpRunner, djcelery and Django_. HttpRunner手册: http://cn.httprunner.org/git地址&#xff1a;httprunner/HttpRunnerManager: 基于 HttpRunner 的 Web 测试平台&#xff0c;已停止维护。 (github.com)部署机器&#xff1a;linux部署…

强强角逐,筑梦开源——2022年度启智社区优秀项目及开发者评选结果正式揭晓

2月24日&#xff0c;第四届OpenI/O启智开发者大会在深圳隆重开幕。本届大会以“算网筑基、开源启智、AI赋能”为主题&#xff0c;邀请国内人工智能开源领域领军院士亲自参加&#xff0c;汇聚学术界、产业界的技术专家&#xff0c;围绕中国算力网资源基座、开源社区服务支撑环境…

Tik Tok shop2023年度策略解读

一、TikTok Shop跨境电商数据显示自2022年上半年东南亚开放跨境电商入驻以来&#xff0c;全年GMV月均复合增速近90%&#xff1b;英国市场2022年下半年的平均交易客单价也同比2021年增长超40%&#xff1b;全年多个重要节点跨境GMV增长显著&#xff0c;例如2022年的圣诞季跨境GMV…

ESP32设备驱动-PCF8574IO扩展模块驱动

PCF8574IO扩展模块驱动 1、PCF8574介绍 PCF8574 是一个使用 I2C 协议的 8 位 I/O 端口扩展器。 通过开发板的SDA 和 SCL 引脚来控制多达 8 个数字 I/O 端口。 其中,A0,A1,A2 为地址引脚,P0,P1,P2,P3,P4,P5,P6,P7 为数字端口。PCF8574的地址如下: 在前面的文章,对PCF8574的…