Git 基本使用

Git

Git是一种分布式版本控制系统,它可以帮助开发团队更好地管理代码并进行协同开发。

gitee,github,gitlab,是基于git的代码托管平台。

官方文档地址(中文):Git - Git 是什么?

安装和配置

官网下载地址:Git - Downloads

1、安装

windows的安装方式

一直下一步直至安装完成

安装成功的校验方式 ——打开cmd输入

git --version 查看版本号

​ 

mac的安装方式

brew install git

Homebrew更换国内镜像源(中科大、阿里、清华) - 知乎

如果返回了版本号,说明安装成功。

2、查看开源项目

配合github或gitee

github官网:GitHub: Let’s build from here · GitHub

gitee官网:Gitee - 基于 Git 的代码托管和研发协作平台

gitlab官网 : 请稍候… (gitlab.com)

以java面试题为例,代码地址:

JavaGuide: 【Java学习+面试指南】 一份涵盖大部分Java程序员所需要掌握的核心知识。

1)找到【clone or download】按钮,点击download zip (并不常用)

2)git clone + 链接地址 ,代表将远程代码克隆到本地

链接地址来自下方默认HTTPS选项

创建项目存放路径

路径不要包含中文,建议在E盘或D盘根路径下创建gitProjects目录

然后在资源管理器的地址栏输入 cmd 并回车,cmd 打开后会自动定位到当前目录

然后执行clone

git clone

JavaGuide: 【Java学习+面试指南】 一份涵盖大部分Java程序员所需要掌握的核心知识。

注意在输入命令时,需要用空格分隔,如果使用不熟练也可直接复制粘贴

看到日志中有100%字样,说明项目下载完成。

补充说明,如果下载的是maven项目,那么打开项目时,

可能需要找到pom.xml,右键,选中Add as Maven Project这一项

3、配置git

第一次使用git时,需要设置两个全局的参数,分别为名字和邮箱,当你后续提交代码后,别人可以通过名字和邮箱来识别出,这是你提交的代码。

命令: git config --list 显示配置列表

git config --global user.name "${用户名}"

git config --global user.email "${邮箱}"

git config --list 显示配置列表 (再次查看就变成自己修改后的了)

在第一次提交代码时,会弹出另一个登录窗口,需要填写在gitee网站中注册的用户名和密码,填写一次后,以后都会默认生效,这个登录操作也是用来校验你是否拥有此仓库的开发权限。

4、配置秘钥(可选)

如果要使用以git开头的链接地址

如 git@gitee.com:SnailClimb/JavaGuide.git (切换SSH选项)

  • 在本地生成秘钥

ssh-keygen -t rsa -C "${邮箱}"

执行命令后,会提醒你设置文件夹保存key,默认是.ssh文件夹

不设置密码直接回车后,生成id_rsa.pub秘钥文件

  • 在gitee上配置秘钥

用户中心 - 设置 - SSH公钥 - 添加公钥

github的对应路径 用户右键 - settings - SSH and GPG keys - new ssh key

  • 验证是否添加成功

使用ssh -T git@gitee.com

或者直接执行 git clone git@gitee.com:SnailClimb/JavaGuide.git

理论基础

1、仓库

仓库是管理项目的最基础目录

git仓库分为本地仓库和远程仓库

1)git init 新建一个本地代码库

2)git clone 从远程拷贝

拿到远程仓库的修改 git pull(拉取)

提交给远程仓库修改 git push(推送)

工作区和暂存区

工作区:就是存放代码的地方 (项目文件夹)

暂存区:临时存放改动的地方 (通常在新建文件时使用)

本地仓库:安全存放代码的地方

远程仓库:(github/gitee)

git所存储的都是一系列的文件快照,然后git来跟踪这些文件快照,发现哪个文件快照有变化它就会提示你需要添加到暂存区或是提交到本地仓库来保证你的工作目录是干净的。

2、更新代码
git pull

pull(拉取)最新的代码,也就是先让本地代码和服务器保持相同的最新状态。

只需要点击蓝色向下的箭头

右下角返回 all files are up-to-date。代表当前代码已经是最新的状态。

git fetch

git fetch是将远程主机的最新内容拉到本地,用户在检查了以后决定是否合并到工作本机分支中。

而git pull 则是将远程主机的最新内容拉下来后直接合并,即:git pull = git fetch + git merge,这样可能会产生冲突,需要手动解决。

3、提交代码

点击对号

左边会显示相应的文件 , 点击提交并推送

点击推送

右下角出现这个就说明推送成功了 . 

在第一次提交代码时,会弹出一个登录窗口,需要填写在gitee网站中注册的用户名和密码

按照此流程,以后就能顺利的提交自己的代码,也能方便的查看别人提交的代码了,虽然刚开始接触会有一点陌生,但是熟练之后会非常方便,希望前几次你能按照此文档操作一下,养成良好的习惯,也能为将来工作打下很好的基础。

查看提交历史

git -> show history 展示谁在什么时间进行了什么修改。

查看某次提交所有相关的文件

如果右侧没显示,那么在提交记录上右键 -> show all affected files

双击文件本身,可以查看对应的修改

将本地仓库和远程关联

第一种:

1)先在gitee上创建仓库 如 xxxxxxxxxxxxxxxxxxx

2)在本地通过idea创建springboot-shop-seckill-1项目,存放在路径A下,会提醒这是一个空的仓库

3)git clone 仓库地址,存放在路径B下

4)将路径A中的内容 拷贝到路径B下,然后进行提交和推送(git add)

第二种:

1)先在gitee上创建仓库 xxxxxxxxxxxxxxxxxxx

2)在本地创建或修改好一个已有的项目,然后对其进行git初始化

git init (让文件夹通过git进行版本管理,会生成 .gitignore文件)

git add (文件夹下的文件需要添加到git中)

之后就分别进行 提交、关联、推送

git commit -m "first commit"

git remote add origin xxxxxxxxxxxxxxxxxxx

git push -u origin master

.gitignore

在工程中,并不是所有文件都需要保存到版本库中的,例如“target”目录及目录下的文件就可以忽略。在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件或目录。

# Compiled class file
*.class

# Eclipse
.project
.classpath
.settings/

# Intellij
*.ipr
*.iml
*.iws
.idea/

# Maven
target/

# Gradle
build
.gradle

# Log file
*.log
log/

# out
**/out/

# Mac
.DS_Store

# others
*.jar
*.war
*.zip
*.tar
*.tar.gz
*.pid
*.orig
temp/

4、回退代码

回退(reset)分为本地仓库回退和远程仓库回退,除此之外还有一种方式为反做(revert),实际应用较少,此处暂且不表。

本地仓库回退

本地仓库回退又分为两种情况,一种是未提交,一种是已提交未push。

对于未提交的情况

文件更改后,状态由白色变为蓝色。

如果修改代码后,不想提交,想恢复成修改前的版本,那么可以本地回退

文件右键-> git -> 回滚-> 确认

对于已提交未push的情况

需要回退提交

执行命令 git reset --hard HEAD~

--hard代表强制执行,会强制将代码更改为你提交前的版本。而HEAD~代表上一次提交,~可以加上数字,HEAD~2返回上上次提交,以此类推,可以指定回退到本地的哪一次提交状态。

远程回退

远程回退的本质是,本地先回退到某一版本。

先在提交记录中找到指定的版本,将当前代码回退到此版本中。

对应命令为

使用git log查看版本号

使用“git reset --hard 目标版本号”命令将版本回退。

git reset --hard 9feb83df6db8b132004325ab03377b2088cba540

git push -f 将更改强制推送到远程

补充说明

因为我们回退后的本地库HEAD指向的版本比远程库的要旧,此时如果用“git push”会报错。如下:

5、分支

分支是一种平行时空,能够支持一种互不影响又同时进行的合作方式。

创建仓库时,自动创建了一个master主干。

具体使用场景:

master 一般用来存放已上线的代码

开发新的功能时,创建新的分支,当前版本在当前分支开发,在此版本上线前,合并到master分支上,然后在master基础上创建下一个分支,这样就能保存每个版本对应的代码,更好地支持版本追溯和回滚。

分支最终还是要合并的,按照此规范时,分支不会出现冲突,但在其他使用情况中合并分支也可能出现冲突。

创建分支

git branch

列出本地已经存在的分支,并且当前分支会用*标记,增加-r 可以查看远程仓库的分支

git branch + {分支名}

默认拉取master上代码到新创建的分支中

git checkout + {分支名}

通过查看git branch结果中 * 所在的位置,来定位分支

合并分支

test -> master

首先当前分支是需要合并过来代码的分支(master)

git merge test 效果是test的最新提交的代码会出现在master中。

推送到远程仓库

git push origin test:test

test:test 冒号前代表 本地分支的名字

冒号后代表 远程分支的名字

分支使用流程

1)如果要创建一个自己的分支 newBranch,确认要基于哪个分支来创建新的分支,比如master,确保是最新代码git pull,然后执行创建分支的流程 git branch newBranch

2)开始修改代码,如果间隔时间较久,再合并一次代码 git merge master

3) 将分支推送给远程仓库 git push origin newBranch:newBranch

4)如果此分支的代码可以上线,还需要将分支代码合并回master中

git checkout newBranch

git pull

git checkout master

git pull

git merge newBranch

#可能需要修改冲突

git commit

git push

分支合并的原理

分支是用来标记特定代码的提交,每一个分支通过SHA1sum值来标识,所以对分支的操作是轻量级的,你改变的仅仅是SHA1sum值。

如下图所示,当前有2个分支,A,C,E属于master分支,而A,B,D,F属于dev分支。

A----C----E(master)

\

B---D---F(dev)

它们的head指针分别指向E和F,对上述做如下操作:

git checkout master //选择or切换到master分支

git merge dev //将dev分支合并到当前分支(master)中

合并完成后:

A---C---E---G(master)

\ /

B---D---F(dev)

现在ABCDEFG属于master,G是一次合并后的结果,是将E和F的代码合并后的结果,可能会出现冲突。而ABDF依然属于dev分支。可以继续在dev的分支上进行开发:

A---C---E---G---H(master)

\ /

B---D---F---I(dev)

6、可视化工具

sourcetree: Sourcetree | Free Git GUI for Mac and Windows (最流行)

Git GUI(Git官方自带的可视化工具)

冲突解决

1、产生冲突的原因

当多个开发者同时使用或者操作 git 中同一个文件时:多个本地分支需要向同一个远端分支推送代码,就有可能发生冲突。

push操作的本质是将本地代码merge到远端分支;同理,pull操作的本质是将远程分支merge到本地分支。所以冲突往往发生在进行这两种操作时。

举例说明:张三和李四都拿到一份提交历史为 a,b 的代码,两人都对同一部分代码进行修改并提交,分别为 c 和 d。现在要将两个提交进行合并,git 不知道应该采用哪个修改,于是就提示冲突,让我们人为进行修改。

2、解决冲突的方式

首先尽量养成避免冲突的提交习惯

  • 尽可能频繁地使用 git pull 同步代码,每次修改都基于最新的代码,可以极大减少发生冲突的概率。
  • 减少每次提交代码的行数,每次做完一个小修改就提交并上传代码。这样即使发生冲突了,也能很快速地解决。

1)每个人使用独立git账户的情况

建议代码提交方式为【先保存本地更改】-【拉取远程代码】-【将本地更改覆盖到最新代码中】

对应命令是

git stash(恢复到上次拉取代码的未改动状态,并将改动保存到暂存区)
git pull
git stash pop (将暂存区的改动覆盖本地)

如果远程代码和本地发生冲突,那么代码会直接报错,先解决冲突,再commit和push。如果没有冲突,就可以直接提交。这里也需要注意,每次commit和push时,需要确认只提交了自己的修改,而没有覆盖他人的修改。如果发生冲突,最好和冲突的另一方沟通一下,进行双重验证。

2)多人共用同一git账户的情况

有一种每个人都在自己的分支上开发的方式,提交代码时合并到一个分支,但合并分支同样会出现冲突,还增加了维护分支的成本,因此并不推荐。

更推荐的使用方式为,在准备提交前,直接使用commit and push,如果没有冲突,会进行自动合并,避免了其他冗余操作。如果存在冲突,在idea或其他git 操作页面会弹出冲突列表,依次解决存在冲突的文件,注意此时文件以三种版本展示,最左侧是你自己的版本,最右侧是远程版本,中间是你的合并结果。

上图中的冲突方案如下:

Accept Yours:代表以自己的为准

Accept Theris:代表以更新下来的文件为准

Merge:代表手动合并(推荐选择)

点击Merge,如果不小心关闭了也没关系,重新打开的入口为

项目右键 -> git -> conflicts resolved

会出现三个对比框,最左侧是当前分支的代码(master) ,最右侧待合并的分支代码(test),中间是想要的合并结果

将需要的内容点击:">>"既可以合并内容到 result 中,不需要的内容点击“x”即可,合并完成后点击 apply 即可。大部分时候是将两个版本的更改都合并到中间就可以了,如果是纯粹的逻辑冲突,就需要找到先提交代码的同事来确认最终结果。

补充说明

如果执行git merge合并时发生冲突,则会进入合并的中间状态。合并的中间状态下将无法执行其他一些操作(如切换分支)。如果不想继续合并,要先用git merge --abort命令退出。该命令会使你回到执行git merge 分支之前的状态。

常用命令总结

git clone 从远程拷贝

git pull 将代码从远程仓库 -> 本地仓库

git add 将代码从工作区 -> 暂存区 (把文件托管git)

git commit 将代码从暂存区 -> 本地仓库 (存在一笔提交记录)

git push 将代码从本地仓库 -> 远程仓库 (促进多人合作)

git stash(恢复到上次拉取代码的未改动状态,并将改动保存到暂存区)

git stash pop (将暂存区的改动覆盖本地)

git branch 创建分支

git checkout 切换分支

git merge 合并分支

git init 新建一个本地代码库

补充说明

github访问不到的解决方案
1、获取ip

依次进入网址,获取ip、域名ip和静态资源ip

IP/服务器github.com的信息 - 站长工具

IP/服务器github.global.ssl.fastly.net的信息 - 站长工具

IP/服务器assets-cdn.github.com的信息 - 站长工具

2、修改hosts文件

Windows系统:打开 C:\Windows\System32\drivers\etc 找到hosts文件

Mac系统:打开文件 vim /etc/hosts

在底部加入前三步获得的内容,保存并退出,然后重启浏览器访问。

过一段时间如果无法访问,就是ip地址更新了,重新获取即可。


​这期就到这里 , 下期见!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

面试官心声:个个都说会自动化,结果面试一问细节全露馅了

今年我们部门计划招聘几名自动化测试工程师,为此我进行了面试和培训,发现了一个让我感到担忧的趋势,许多候选人可以轻松地回答有关脚本编写、元素定位、框架API等问题。然而一问到实际项目,比如 “如何从0开始搭建自动化体系”、“…

k8s---pod控制器

pod控制器发的概念: 工作负载,workload用于管理pod的中间层,确保pod资源符合预期的状态。 预期状态: 1、副本数 2、容器重启策略 3、镜像拉取策略 pod出故障的出去等等 pod控制器的类型: 1、replicaset&#xf…

from表单通过遍历的方式显示

当我们绘制表单数据的时候&#xff0c;有时候知道需要绘制的内容&#xff0c;但是不想在页面一条一条写数据&#xff0c;如果通过遍历显示呢 下面是在uniapp中写h5的方法&#xff0c;直接上代码 <view><view classitem v-for(item,index) in arr :keyindex><v…

【学习资源】分享三个文献互助平台(科研通 / 谷粉 / 纬度)

最近博主准备阅读一些专业相关的文献&#xff0c;有一些可以从博主所在单位购买的数据中直接下载&#xff0c;然而有一些论文数据库是没有购买的&#xff0c;所以要博主自己想办法去下载。 一般来说&#xff0c;两年以前的SCI论文&#xff0c;基本上都可以借助Scihub下载的到&…

pc端微信QQ使用代理解决方案

背景 多数金融类公司都会限制QQ和微信访问&#xff0c;但某些情况导致不得不使用&#xff0c;时不时使用手机会让你的老板感觉你在摸鱼&#xff0c;所以站在技术的角度上研究一下如果在pc端使用 代理开启 以微信举例&#xff0c;如果你用的clash&#xff0c;这里的地址可以设…

2024 解决matplotlib中文字体问题

第一种代码&#xff08;失败代码&#xff09; import matplotlib as mpl import matplotlib.pyplot as plt from matplotlib.font_manager import FontPropertiesfont_path /Users/huangbaixi/Desktop/SimHei.ttfdef plot_demo():#print(mpl.get_cachedir())# 绘制折线图font…

人脸考勤技术,这个隐藏功能太好用了!

随着科技的不断发展&#xff0c;人脸识别技术在各个领域得到了广泛的应用。其中&#xff0c;三维人脸考勤系统作为一种高级的人脸识别技术&#xff0c;不仅提高了考勤系统的准确性&#xff0c;还增强了安全性。 客户案例 制造企业 山东某大型制造企业引入了泛地缘科技推出的三…

【excel密码】Excel中如何使部分单元格区域实现加密

Excel文件可以设置保护工作表&#xff0c;那么可以只保护工作表中的部分单元格&#xff0c;其他地方可以正常编辑吗&#xff1f;当然是可以的&#xff0c;今天我们学习&#xff0c;如何设置保护部分单元格。 首先&#xff0c;我们先将整张工作表选中&#xff08;Ctrl A&#…

【KMP】【二分查找】【C++算法】100207. 找出数组中的美丽下标 II

作者推荐 【矩阵快速幂】封装类及测试用例及样例 本文涉及的基础知识点 二分查找算法合集 LeetCode100207. 找出数组中的美丽下标 II 给你一个下标从 0 开始的字符串 s 、字符串 a 、字符串 b 和一个整数 k 。 如果下标 i 满足以下条件&#xff0c;则认为它是一个 美丽下标…

主流浏览器设置代理IP之QQ浏览器

给浏览器设置代理IP是目前代理IP的主流使用场景之一&#xff0c;接下来小编就手把手教你如何对QQ浏览器进行代理IP设置 注&#xff1a;本次使用IP来源于携趣代理平台QQ浏览器内设置IP代理 1、首先需要进入浏览器【设置】 2.点击【工具】选择【lnternet选项】然后进行点击。 3.…

零基础精酿啤酒,这款智能啤酒酿造机掀起啤酒消费的DIY热潮

破壁机、台式单烤、空气炸锅……回顾2023年&#xff0c;小家电行业在高端、智能等趋势下迎来了新一轮的消费迭代热潮&#xff0c;越来越多契合消费者细分需求的“新兴家电”正在成为市场新宠。比如&#xff0c;此前很少有消费者会关注的啤酒酿造机。 啤酒如何酿造&#xff1f;…

Unity ComputeShader 使用GPU快速计算复杂问题

Unity ComputeShader 使用GPU快速计算复杂问题 前言项目创建ComputeShader编写CompturShader创建Unity代码场景布置运行场景 参考 前言 遇到一个问题&#xff0c;需要大量的计算&#xff0c;在Unity中直接写会长时间的阻塞主线程&#xff0c;正好使用ComputeShader让GPU来帮我…

Windows 下 QT开发环境的搭建:

下载QT:Index of /archive/qt/5.14 下载Cmake :CMake - Upgrade Your Software Build System (1)QT在windows,C, 打包exe&#xff1a; step1:window上安装QT软件&#xff1a; Windows下的QT系统开发环境搭建_qt windows-CSDN博客. step2:新建一个界面工程&#xff1a; (1)打…

C++标准学习--智能指针

shared_ptr和weak_ptr的配合使用是个问题。unique_ptr的使用场合似乎比较局限。 文章C 智能指针详解&#xff08;一&#xff09;——unique_ptr - 知乎 (zhihu.com) 介绍了unique_ptr的使用。它可以由shared_ptr转来&#xff0c;主要用到了std::move。 主要场景其中提到&#…

WaitForSingleObject 函数的诸多用途与使用场景总结

目录 1、WaitForSingleObject函数详细说明 2、在线程函数中调用WaitForSingleObject实现Sleep&#xff0c;可立即退出Sleep状态 3、调用WaitForSingleObject函数监测线程或进程是否已经退出 3.1、子进程实时监测主进程是否已经退出&#xff0c;主进程退出了&#xff0c;则子…

第一个Python程序_获取网页 HTML 信息[Python爬虫学习笔记]

使用 Python 内置的 urllib 库获取网页的 html 信息。注意&#xff0c;urllib 库属于 Python 的标准库模块&#xff0c;无须单独安装&#xff0c;它是 Python 爬虫的常用模块。 获取网页 HTML 信息 1) 获取响应对象 向百度&#xff08;http://www.baidu.com/&#xff09;发起…

UML-用例图

提示&#xff1a;用例图是软件建模的开始&#xff0c;软件建模中的其他图形都将以用例图为依据。用例图列举了系统所需要实现的所有功能&#xff0c;除了用于软件开发的需求分析阶段&#xff0c;也可用于软件的系统测试阶段。 UML-用例图 一、用例图的基础知识1.用例图的构成元…

网页屏幕适配通透了

一&#xff0c;如果设计尺寸固定 那就按照固定尺寸开发 一般都是1920*1080 二&#xff0c;需要适配多种像素屏幕&#xff08;大屏可视化&#xff09; 可使用媒体查询设置多套css样式或者使用自适应单位&#xff0c;%&#xff0c;vw&#xff0c;vh 最好解决方案rem&#xff…

NetCore部署微服务(三)

接上文&#xff0c;服务端部署完成之后&#xff0c;同样我们也需要修改一下客户端代码 Blocking Queries 1.1 服务发现 在客户端代码中使用Nuget安装consul包 修改配置文件&#xff0c;我们首先需要把consul的请求地址配置在配置文件中 修改control方法 using Consul; usin…

Navicat教程

下载连接&#xff08;无限使用版&#xff09; 链接&#xff1a;https://pan.baidu.com/s/1IprYLRv0bSnW-XKn0trRtw 提取码&#xff1a;j6qx 连接使用 1.1 连接数据库 打开navicat&#xff0c;点击连接&#xff0c;选择数据库 1.2 操作数据库 右键连接&#xff0c;点击新建数…