git入门教程+常用命令

Git入门教程

本文章主要参照视频教程:https://www.bilibili.com/video/BV1FE411P7B3/?spm_id_from=333.337.search-card.all.click&vd_source=06caf161b187fb3f4c039bc15e238fea

为什么要使用GIT

版本控制是项目、文档迭代的必然要求,所以需要使用git来进行版本控制
在这里插入图片描述

本地版本控制

在这里插入图片描述
记录文件更新,对不同版本文件做一个快照或是记录补丁,适合个人使用,例如RCS
在这里插入图片描述

集中版本控制

所有版本数据放在服务器上(CS架构),每个开发者从服务器上拉取最新版本或上传自己的修改
在这里插入图片描述
特点:

  1. 所有数据保存在单一的服务器上,容易受到服务器损坏影响
  2. 用户本地只有自己之前同步的版本,不联网看不到历史版本
  3. 代表性产品:SVN

分布式版本控制

特点:

  1. 所有版本信息仓库全部同步到每个用户本地
  2. 可以本地查看所有历史版本,可以离线本地提交
  3. 需要在联网时push到相应的服务器或其它用户处
  4. 增加了本地存储空间的占用
  5. 有保密安全隐患
  6. 代表性产品:Git
    在这里插入图片描述

SVN与Git

  1. SVN是集中式版本控制系统,Git是分布式版本控制系统
  2. 所以SVN的所有历史版本都在一个服务器上,而Git所有用户都有完整的历史记录
  3. SVN需要拉取远程版本,完成工作后上传到远程
  4. Git在工作时不需要联网,联网协同时进行code review即可

安装Git及环境配置

在这里插入图片描述

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

淘宝镜像地址:https://registry.npmmirror.com/binary.html?path=git-for-windows/

点击下载链接之后,将会跳到Downloading Git,根据自己电脑系统选择不同的位数进行下载,这里有两个版本区别如下:
Standalone Installer:安装版,安装完之后会自动在鼠标右键时显示 Git GUI Here 和 Git Bash Here (推荐)
Portable (“thumbdrive edition”):绿色版,解压就能运行,免安装,不过绿色版不会在鼠标右键时显示 Git GUI Here 和 Git Bash Here

剩余设置查看:https://blog.51cto.com/u_15756445/5592505
安装完成后在任意文件夹位置点击鼠标右键即可出现:
在这里插入图片描述

Git Bash:Unix与Linux风格的命令行,推荐

Git GUI :图形界面的Git 建议少使用 多熟悉命令行

后面都是直接用cmd了

Linux基本命令

cd xxxcd到某个目录
cd …回退到上一个目录
cd回到根目录
pwd显示当前路径
ls显示当前目录文件
ll显示当前目录文件(详细)
touch xx.xx新建文件
rm xx.xx删除文件
mkdir新建文件夹
rm -r xxx删除xxx文件夹
mv xxx.xx src xx将xxx文件移动到xx目录下
clear清屏
reset重新加载终端
history查看命令历史
help帮助
exit退出

Git的必要配置

查看配置

git config -l 当前的配置清单
在这里插入图片描述

git config - -system -l 查看系统配置
在这里插入图片描述

git config - -global -l 查看当前用户本地全局配置 (需要在git 文件夹里)

在这里插入图片描述
在这里插入图片描述
这些配置文件都保存在本地:

  1. Git\etc\gitconfig或Git\mingw64\etc\gitconfig Git安装目录下 是system系统配置
  2. C:\Users\微软账户.gitconfig或C:\Users\Administrator.gitconfig 适用于当前登录用户的配置 是global用户全局配置

都可以直接编辑

推荐使用everything来查找电脑文件 如下图

在这里插入图片描述

配置用户及邮箱(必要)

git config - -global user.name “xxx”

git config - -global user.email xxx

Git工作原理

Git工作区域

Git本地有三个区域——工作目录(Working Directory)、暂存目录(Stage(Index))、资源库(Reposit或Git Directory)

远程有一个区域——git仓库(Remote Directory)

在这里插入图片描述

  • 工作目录(Working Directory)、工作区(Workspace):平时存放项目代码的地方
  • Index/Stage:暂存区 临时存放修改
  • Repository:仓库区,是安全存放数据的位置,HEAD会指向最后存入仓库的版本
  • Remote:远程仓库,托管代码的服务器

工作目录构成:

  • Directory:使用Git管理的目录,也是一个仓库 包含我们的工作空间和Git的管理文件
  • Workspace:需要通过git管理版本的目录和文件
  • .git:存放Git管理信息的目录,初始化仓库时自动创建
  • Index/Stage:待提交区,在提交给repo之前所有的更新都在暂存区
  • Local Repo:本地仓库,存放在本地的版本库,HEAD是当前的开发分支

工作区存放文件 .git(隐藏文件夹)
在这里插入图片描述
在这里插入图片描述

打开.git文件夹可以看到HEAD 和Index

在这里插入图片描述

其中HEAD文件夹打开后是对最新的项目版本的引用

在这里插入图片描述

Git工作流程

  1. 在工作目录添加、修改文件
  2. 将需要版本管理的文件放入暂存区域(git add)
  3. 将暂存区域的文件提交到git仓库(git commit)

文件状态有三种:已修改(modified)、已暂存(staged)、已提交(committed )

Git实践

Git项目搭建

常用指令

在这里插入图片描述
常用六大指令如图

  1. 所有修改不一定全部都要提交,只选需要提交的(add)
  2. 提交(commit)
  3. 本地同步远程(push)
  4. 远程克隆本地(clone)
  5. 本地切换工作区(checkout)
  6. 远程直接同步工作区(pull)

本地仓库搭建

  1. 打开文件夹,右键 git bash here
  2. 初始化仓库
    1. git init 初始化仓库 生成.git文件夹
    2. git clone link 克隆远程仓库
      在这里插入图片描述

文件状态转换

文件的4种状态转换如下流程图:
在这里插入图片描述

文件状态转换实践

git status 查看所有文件状态 此时会显示当前目录下所有文件的状态

git status 文件名 查看指定文件状态

新创建的文件将会被分类为Untracked files
在这里插入图片描述

git add . 添加所有文件到暂存区

git add 文件名 添加指定文件到暂存区

添加之后文件变为staged
在这里插入图片描述

git commit -m “提交备注” 提交文件到本地仓库

git commit -m "commit message"

此时如果是从远程仓库克隆的,就会提示可以push到远程仓库
在这里插入图片描述

git push 指令将本地仓库与远程仓库同步

git push origin branch-name

origin是远程仓库的名称,branch-name是要推送到的远程分支的名称
在这里插入图片描述

忽略文件

对于一些不需要进行版本控制的文件可以进行忽略

在主目录下创建.gitignore文件,此文件有以下示例:

  1. 忽略空行和#开头的内容
  2. *.txt 忽略所有以txt结尾的文件
  3. !lib.txt 但lib.txt除外
  4. /temp 忽略目录下除了temp之外的文件夹
  5. build/ 忽略build目录下的所有文件
  6. doc/*.txt 忽略形如doc/notes.txt 但不包括doc/server/arch.txt

码云Gitee使用

码云注册

SSH公钥

  1. 进入C:\Users\微软用户名.ssh文件夹
  2. 右键此文件夹进入git bash
  3. 键入 ssh-keygen -t rsa (这里rsa是加密算法)
  4. 回车到生成完成
    在这里插入图片描述

这里id_rsa 是私钥 .pub是公钥

打开.pub文件,复制内容并粘贴到码云的公钥一栏

打开码云-头像-个人主页-SSH公钥

在这里插入图片描述

输入公钥并添加即可

在这里插入图片描述

新建仓库

在这里插入图片描述

也可以右上角导入GitHub的仓库
在这里插入图片描述

找到供克隆的链接 clone到本地即可
在这里插入图片描述

IDE集成Git的使用

Jetbrain IDEA: https://www.bilibili.com/video/BV1FE411P7B3?p=12&vd_source=06caf161b187fb3f4c039bc15e238fea

VSCode:https://code.visualstudio.com/docs/sourcecontrol/overview

在这里插入图片描述

打开非git管理的文件夹:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

ctrl shift + p 输入clone可以克隆远程仓库

Git分支

Git控制下的项目往往会有许多不同的分支。代表主干、开发、新特性等等的分支
在这里插入图片描述

分支常用指令

git branch # 列出所有本地分支git branch -r # 列出所有远程分支git branch branchname  #新建一个分支,但依然停留在当前分支git branch -b branchname #新建一个分支并且换到该分支git merge branchname #合并指定分支到当前分支git branch -d branchname #删除分支git push origin --delete branchname # 删除远程分支
git branch -dr branchname #删除远程分支

分支合并时可能会产生冲突,需要修改冲突

一般分支标准

master/main分支作为主分支,应该用来发布新版本,需要特别稳定,一般情况下不允许在上面工作,工作一般是在dev分支上,dev代码分支稳定后合并到主分支上来。

进阶资源

Git大全:https://gitee.com/all-about-git

学习Git分支:https://oschina.gitee.io/learn-git-branching/

官方Git book:https://git-scm.com/book/en/v2

Git常用命令

仓库

# 在当前目录新建一个Git代码库
$ git init# 新建一个目录,将其初始化为Git代码库
$ git init [project-name]# 下载一个项目和它的整个代码历史
$ git clone [url]

配置

# 显示当前的Git配置
$ git config --list# 编辑Git配置文件
$ git config -e [--global]# 设置提交代码时的用户信息
$ git config [--global] user.name "[name]"
$ git config [--global] user.email "[email address]"

增加/删除文件

# 添加指定文件到暂存区
$ git add [file1] [file2] ...# 添加指定目录到暂存区,包括子目录
$ git add [dir]# 添加当前目录的所有文件到暂存区
$ git add .# 添加每个变化前,都会要求确认
# 对于同一个文件的多处变化,可以实现分次提交
$ git add -p# 删除工作区文件,并且将这次删除放入暂存区
$ git rm [file1] [file2] ...# 停止追踪指定文件,但该文件会保留在工作区
$ git rm --cached [file]# 改名文件,并且将这个改名放入暂存区
$ git mv [file-original] [file-renamed]

代码提交

# 提交暂存区到仓库区
$ git commit -m [message]# 提交暂存区的指定文件到仓库区
$ git commit [file1] [file2] ... -m [message]# 提交工作区自上次commit之后的变化,直接到仓库区
$ git commit -a# 提交时显示所有diff信息
$ git commit -v# 使用一次新的commit,替代上一次提交
# 如果代码没有任何新变化,则用来改写上一次commit的提交信息
$ git commit --amend -m [message]# 重做上一次commit,并包括指定文件的新变化
$ git commit --amend [file1] [file2] ...

分支

# 列出所有本地分支
$ git branch# 列出所有远程分支
$ git branch -r# 列出所有本地分支和远程分支
$ git branch -a# 新建一个分支,但依然停留在当前分支
$ git branch [branch-name]# 新建一个分支,并切换到该分支
$ git checkout -b [branch]# 新建一个分支,指向指定commit
$ git branch [branch] [commit]# 新建一个分支,与指定的远程分支建立追踪关系
$ git branch --track [branch] [remote-branch]# 切换到指定分支,并更新工作区
$ git checkout [branch-name]# 切换到上一个分支
$ git checkout -# 建立追踪关系,在现有分支与指定的远程分支之间
$ git branch --set-upstream [branch] [remote-branch]# 合并指定分支到当前分支
$ git merge [branch]# 选择一个commit,合并进当前分支
$ git cherry-pick [commit]# 删除分支
$ git branch -d [branch-name]# 删除远程分支
$ git push origin --delete [branch-name]
$ git branch -dr [remote/branch]# 分支更名(不在要更名的分支上)
git branch -m 旧分支名 新分支名

标签

# 列出所有tag
$ git tag# 新建一个tag在当前commit
$ git tag [tag]# 新建一个tag在指定commit
$ git tag [tag] [commit]# 删除本地tag
$ git tag -d [tag]# 删除远程tag
$ git push origin :refs/tags/[tagName]# 查看tag信息
$ git show [tag]# 提交指定tag
$ git push [remote] [tag]# 提交所有tag
$ git push [remote] --tags# 新建一个分支,指向某个tag
$ git checkout -b [branch] [tag]

查看信息

# 显示有变更的文件
$ git status# 显示当前分支的版本历史
$ git log# 显示commit历史,以及每次commit发生变更的文件
$ git log --stat# 搜索提交历史,根据关键词
$ git log -S [keyword]# 显示某个commit之后的所有变动,每个commit占据一行
$ git log [tag] HEAD --pretty=format:%s# 显示某个commit之后的所有变动,其"提交说明"必须符合搜索条件
$ git log [tag] HEAD --grep feature# 显示某个文件的版本历史,包括文件改名
$ git log --follow [file]
$ git whatchanged [file]# 显示指定文件相关的每一次diff
$ git log -p [file]# 显示过去5次提交
$ git log -5 --pretty --oneline# 显示所有提交过的用户,按提交次数排序
$ git shortlog -sn# 显示指定文件是什么人在什么时间修改过
$ git blame [file]# 显示暂存区和工作区的差异
$ git diff# 显示暂存区和上一个commit的差异
$ git diff --cached [file]# 显示工作区与当前分支最新commit之间的差异
$ git diff HEAD# 显示两次提交之间的差异
$ git diff [first-branch]...[second-branch]# 显示今天你写了多少行代码
$ git diff --shortstat "@{0 day ago}"# 显示某次提交的元数据和内容变化
$ git show [commit]# 显示某次提交发生变化的文件
$ git show --name-only [commit]# 显示某次提交时,某个文件的内容
$ git show [commit]:[filename]# 显示当前分支的最近几次提交
$ git reflog

远程同步

# 下载远程仓库的所有变动
$ git fetch [remote]# 显示所有远程仓库
$ git remote -v# 显示某个远程仓库的信息
$ git remote show [remote]# 增加一个新的远程仓库,并命名
$ git remote add [shortname] [url]# 取回远程仓库的变化,并与本地分支合并
$ git pull [remote] [branch]# 上传本地指定分支到远程仓库
$ git push [remote] [branch]# 强行推送当前分支到远程仓库,即使有冲突
$ git push [remote] --force# 推送所有分支到远程仓库
$ git push [remote] --all# 删除远程仓库
git remote rm [name]# 更改远程仓库地址
git remote set-url origin [url]

撤销

# 恢复暂存区的指定文件到工作区
$ git checkout [file]# 恢复某个commit的指定文件到暂存区和工作区
$ git checkout [commit] [file]# 恢复暂存区的所有文件到工作区
$ git checkout .# 重置暂存区的指定文件,与上一次commit保持一致,但工作区不变
$ git reset [file]# 重置暂存区与工作区,与上一次commit保持一致
$ git reset --hard# 重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变
$ git reset [commit]# 重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致
$ git reset --hard [commit]# 重置当前HEAD为指定commit,但保持暂存区和工作区不变
$ git reset --keep [commit]# 新建一个commit,用来撤销指定commit
# 后者的所有变化都将被前者抵消,并且应用到当前分支
$ git revert [commit]#暂时将未提交的变化移除,稍后再移入
$ git stash
$ git stash pop# 移除缓存
git rm -r --cached .# 撤销commit
git reset HEAD^

其他

# 生成一个可供发布的压缩包
$ git archive

以上常用命令来自阮一峰老师的博客文章《常用 Git 命令清单》感谢阮老师!

实践常用命令

# 重命名文件
mv nameA(.xx) nameB(.xx)# 移动文件
mv fileA dirA
  1. 无法链接Github

    在这里插入图片描述

    我这里的命令是git config --global http.proxy http://127.0.0.1:7890

  2. 文件超大小:this exceeds GitHub’s file size limit of 100.00 MB【本部分未完全解决】
    在这里插入图片描述

安装git lfs:

安装 Git Large File Storage - GitHub 文档

使用git lfs:

  • 使用 git lfs track 命令进行大文件追踪 例如git lfs track "*.png" 追踪所有后缀为png的文件
  • 使用 git lfs track 查看现有的文件追踪模式
  • 提交代码需要将gitattributes文件提交至仓库. 它保存了文件的追踪记录
  • 提交后运行git lfs ls-files 可以显示当前跟踪的文件列表
  • 将代码 push 到远程仓库后,LFS 跟踪的文件会以『Git LFS』的形式显示:
  • clone 时 使用’git clone’ 或 git lfs clone均可

配置 Git Large File Storage - GitHub 文档

  1. Github不同步contribution

解决:查看本地git的邮箱在不在github的设置里面

  1. 清除commit记录

BFG Repo-Cleaner

BFG Repo-Cleaner 的使用

git bfg 的使用(删除提交记录中的敏感信息,删除文件等)_Grassto的博客-CSDN博客

或者直接删掉.git和.gitignore文件重新初始化git

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

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

相关文章

Springboot自定义start首发预告

Springboot自定义start首发预告 基于Springboot的自定义start , 减少项目建设重复工作, 如 依赖 , 出入参包装 , 日志打印 , mybatis基本配置等等等. 优点 模块化 可插拔 易于维护和升级 定制化 社区支持(后期支持) 发布时间 预告: 2023-12-10 预计发布: 2024-1-1 , 元旦首…

移动端原生实现列表列固定横向滚动功能

功能介绍: 在移动端开发中,会用到列表作为信息展示方式,一般希望上下滚动时,可以固定表头,左右滚动时,可以固定最左列。 需求: 1、列表可以使用数组循环遍历; 2、上下滚动时&…

离线环境下使用百度地图(vue版)(展示自己的地图瓦片)3.0版本api

1.下载自己想要的地图网片 (1)瓦片图下载 提取百度网盘中文件,然后运行exe文件,选择要下载的层级及地区即可 百度网盘链接:https://pan.baidu.com/s/16sOJ9ws7HCgNH3EMf7Ejyg?pwd0q0e 提取码:0q0e (2)将瓦片图映射到网上 推荐使…

Python-docx 深入word源码 自定义字符间距

代码和实现效果 from docx import Document from docx.oxml import OxmlElement from docx.oxml.ns import qn from docx.shared import Pt# 调整pt设置字间距 def SetParagraphCharSpaceByPt(run, pt1):通过修改word源码方式, 添加w:spacing标签直接通过调整pt来设置字符间距…

Blender学习--制作带骨骼动画的机器人

1. 首先创建一个机器人模型 时间关系,这部分步骤有时间补充 2. 然后为机器人创建一副骨架 时间关系,这部分步骤有时间补充 3.骨骼绑定 切换到物体模式,选中机器人头部,Shift选中骨骼,切换到姿态模式,&am…

SpringBoot集成系列--xxlJob

文章目录 一、搭建调度中心xxl-job-admin1、下载项目2、调整项目参数3、执行初始化数据库SQL4、启动项目5、访问 二、集成步骤1、添加xxl-job的依赖2、添加xxl-job的依赖3、配置执行器4、创建执行器5、开发任务1)方式1:BEAN模式(方法形式&…

RocketMQ源码

RocketMQ的核心三流程 启动流程 RocketMQ服务端由两部分组成NameServer和Broker,NameServer是服务的注册中心,Broker会把自己的地址注册到NameServer,生产者和消费者启动的时候会先从NameServer获取Broker的地址,再去从Broker发…

【自动驾驶】2023年度盘点:智能汽车、自动驾驶、车联网必读书

2023年,智能驾驶和新能源汽车行业仍然有着肉眼可见的新进展。自动驾驶技术继续尝试从辅助驾驶向自动驾驶的过渡,更重要的是相关技术成本的下降。根据《全球电动汽车展望2023》等行业报告,预计2023年平均成本将降至100美元/千瓦时以下&#xf…

成都工业学院Web技术基础(WEB)实验八:BOM、DOM基本操作

写在前面 1、基于2022级计算机大类实验指导书 2、代码仅提供参考,前端变化比较大,按照要求,只能做到像,不能做到一模一样 3、图片和文字仅为示例,需要自行替换 4、如果代码不满足你的要求,请寻求其他的…

【开源】基于Vue.js的就医保险管理系统

文末获取源码,项目编号: S 085 。 \color{red}{文末获取源码,项目编号:S085。} 文末获取源码,项目编号:S085。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 科室档案模块2.2 医生档案模块2.3 预…

最好的猫罐头品牌有哪些?精选的5款口碑好的猫罐头推荐!

对于一个刚入门的养猫小白来说,面对市面上琳琅满目的猫罐头选择确实让人头大。我们总想选到营养价值高的罐头,但又怕猫咪不喜欢吃,也担心选到不安全的产品。 最好的猫罐头品牌有哪些?根据我开宠物店7年的经验,今天我将…

「哈士奇赠书活动 - 46期」-『技术人修炼之道:从程序员到百万高管的72项技能(第2版)』

⭐️ 赠书 - 《技术人修炼之道(第2版)》 ⭐️ 内容简介 本书旨在帮助计算机IT技术人员提升职场核心技能、架构思维、团队管理能力、商业认知,让每一位普通的技术从业者,修炼成为"技术职场超级个体”,通过全面升级…

IntelliJ IDEA无公网远程连接Windows本地Mysql数据库提高开发效率

🔥博客主页: 小羊失眠啦. 🎥系列专栏:《C语言》 《数据结构》 《Linux》《Cpolar》 ❤️感谢大家点赞👍收藏⭐评论✍️ 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,…

windows启动出现 zookeeper此处不应有java

可能是Java 路径出了问题,这个programFiles直接有空格,没错就有空格,笔者一开始以为这么点算什么空格,需要把这个对应的Java文件到别的英文路径下,并且修改环境变量。就可以启动的。 还可以启动方式有很多种&#xff0…

2.2 模型基础

建模流程 作业 这次搞了10天左右终于把作业做完了。 先是去学习了下如何建模->然后将模型导入Substance Painter里绘制贴图->最后导入到unity中(虽然最后效果很差),但是回过头来看整个过程学习到了次时代美术的工作流,思考…

658. 找到 K 个最接近的元素

658. 找到 K 个最接近的元素 Java代码&#xff1a;滑窗 class Solution {public List<Integer> findClosestElements(int[] arr, int k, int x) {List<Integer> list new ArrayList<>();for (int i 0; i < arr.length; i) {arr[i] arr[i] - x;}for(i…

简单实现Spring容器(二) 封装BeanDefinition对象放入Map

阶段2: // 1.编写自己的Spring容器,实现扫描包,得到bean的class对象.2.扫描将 bean 信息封装到 BeanDefinition对象,并放入到Map.思路: 1.将 bean 信息封装到 BeanDefinition对象中,再将其放入到BeanDefinitionMap集合中,集合的结构大概是 key[beanName]–value[beanDefintion…

MySQL行锁范围分析(行锁、间隙锁、临键锁)

MySQL 中锁的概念 排它锁&#xff08;Exclusive Lock&#xff09; X 锁&#xff0c;也称为写锁&#xff0c;若事务T对对象A加上X锁&#xff0c;则只允许T读取和修改A&#xff0c;其他任何事物都不能再对A 加任何锁&#xff0c;直到T释放A上的锁。 SELECT…FOR UPDATE 对读取的…

风控之Android设备指纹技术

标识性参数——Android ID、IMEI、OAID非标识性参数 非标识性参数——手机运营商 1 设备指纹 简单来讲&#xff0c;设备指纹是指用于标识出该设备的设备特征。可以是单一设备特征&#xff0c;也可以是多种设备特征的组合&#xff0c;以方便风控系统对设备的唯一性进行识别。…

产品入门第一讲:Axure的安装以及基本使用

&#x1f4da;&#x1f4da; &#x1f3c5;我是默&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; ​​​ &#x1f31f;在这里&#xff0c;我要推荐给大家我的专栏《Axure》。&#x1f3af;&#x1f3af; &#x1f680;无论你是编程小白&#xff0c;还是有…