Git 指令深入浅出【3】—— 远程仓库

Git 指令深入浅出【3】—— 远程仓库

  • 一、远程仓库
    • (一)基本指令
      • 1. 配置 SSH 密钥
      • 2. 推送远程仓库
        • 其他分支推送远程仓库
          • 方法1
          • 方法2
            • 建立分支链接
          • 方法3
      • 3. 合并分支请求
    • (二).gitignore 忽略文件
    • (三)标签管理
  • 二、多人协作实战
    • 异分支开发

一、远程仓库

先在 Gitee 或 GitHub 上新建一个仓库。
完成创建之后,大家会注意到有 Pull Request 这么一栏,Pull Request 的作用就是:合并分支申请。在企业中,项目代码需要经过测试的验证,上级的确认,最后才能合并到master分支(或者其他分支)中,并不是直接就能合并分支。鲁莽的举动会污染master分支(污染了也能回退)。
image.png

(一)基本指令

# 克隆远程仓库
git clone https:// # 此处先选择 HTTPS 方式克隆

image.png

查看远程仓库名
cd <warehouseName>
git remotegit remote -v # 更详细的信息
# fetch 是拉取,表示本地有拉取权限
# push 是推送,表示能够从本地推送到远程仓库

image.png
image.png

1. 配置 SSH 密钥

如果有朋友在没有配置公钥的情况下直接使用了SSH的方式克隆,可能会报下图所示的错误。
image.png

那么我们应该如何设置公钥呢?步骤如下图所示,首先是在 Gitee 或 GitHub 中找到添加公钥的位置,标题可以自己起一个,比如:TestPublicKey
image.png

接着填写公钥部分,这时候需要在服务器上先找找是否有id_rsaid_rsa.pub这两个文件,前者是私钥,切莫泄露给其他人;后者是公钥,有的话直接填入即可。

# 查找公钥
cd ~
ls -a
cd .ssh
ls -a

此处我们并没有看到id_rsa.pub文件,因此需要我们设置公钥。
image.png

ssh-keygen -t rsa -C "--------@qq.com" # 此处的邮箱必须与 Gitee 上邮箱管理的邮箱一致!# ssh-keygen:用于生成、管理和转换认证密钥的工具
# -t rsa: 指定了要生成的密钥类型是RSA。RSA是一种常用的公钥加密算法。
# -C:表示提供一个注释。这个注释用于识别这个密钥,通常用于标识密钥的所有者或记录附加信息。

image.png

# 查看公钥
cd .ssh
ls
cat id_rsa.pub # 将公钥粘贴到 Gitee 上

image.png

# 使用 SSH 克隆仓库
git clone git@gitee.com:LLL-zxx/Learning-Java.git# 完成克隆之后需要配置 user.name 与 user.email 

配置 user.nameuser.email 见 Git 指令深入浅出【1】—— 文件管理

2. 推送远程仓库

git branch -a # 所有分支
git branch -r # 远程分支

image.png

touch test
vim test # 随便写
git add test
git commit -m "测试从 本地仓库推送文件 至 远程仓库"
git push

image.png

其他分支推送远程仓库

如果本地推送的分支(test)在远程不存在,显示的并不是推送成功,而是“一切都更新到最新状态”,我们在远程分支上也不能看到最新的内容。解决办法有三个:

  • 创建对应远程分支再推送
  • 直接推送到远程仓库(含 创建远程分支)
  • 直接创建本地分支 与 远程分支,并建立链接

image.png

方法1

笔者先演示一下方法1:手动创建对应远程分支再推送
第一步自然是在 Gitee 或 GitHub 上创建新分支,但是创建完之后是无法理解查看到的。因为本地的不能更远程实时同步,需要拉取远程的最新内容
image.png

# 拉取远程最新内容
git branch -a
git pull # 拉取新创建的远程分支
git branch -a

image.png

当我们尝试将本地的文件推送上去的时候仍然会报错,这是因为当前分支落后于远程分支,需要先拉取远程分支的内容完成同步才能推送。

ls -a
git add testBranch
git commit -m "推送到指定远程分支"
git push

image.png

# 拉取+合并分支的内容
git pull <remote> <localBranch> <remoteBranch> # 分支未链接(名字相同后者可省略)
git add testBranch
git commit -m "推送到指定远程分支"
git push

image.png


方法2
# 方法2:直接推送到远程仓库
git checkout -b testBranch2
vim testBranch
git add testBranch
git commit -m "直接推送到远程仓库" 
git push <remote> <branchName> # 含创建新远程分支

image.png


建立分支链接

上面两个方法挺好用的,但却都存在后患:本地分支和远程分支是没有链接的,即能够正常推送push却无法拉取pull**。**当然,这只是针对新建分支而已,master分支是系统已经建立链接。

git pull

image.png

# 查看本地与远程分支的链接
git branch -vv
# 显示sha1并提交每个头部的主题行,以及与上游分支的关系(如果有的话)

image.png
尽管给出了两个办法,但是咱们还是使用后者(相对来说是一劳永逸)

# 建立本地分支与远程分支的链接
git branch --set-upstream-to=<remote>/<branch> <localBranch>

image.png
image.png


方法3
# 方法3:创建分支并建立链接
git checkout -b <localBranch> <remote>/<remoteBranch> # 注意,远程分支需要已经存在!

image.png

3. 合并分支请求

image.png

(二).gitignore 忽略文件

image.png

如果想推送某个确定的文件,但该文件确属于忽略文件,应该怎么写呢?有两个办法:
方法1:直接将特定文件写入 忽略文件
image.png

git add -f a.so
git check-ignorge -v a.so

(三)标签管理

标签tag,可以简单的理解为是对某次commit的一个标识,相当于起了一个别名。
例如,在项目发布某个版本的时候,针对最后一次commit起一个v1.0这样的标签来标识里程碑的意义。这有什么用呢?相较于难以记住的commit id ,tag 很好的解决这个问题,因为tag一定要给一个让人容易记住,且有意义的名字。当我们需要回退到某个重要版本时,直接使用标签就能很快定位到。

# 打标签
git tag v1.0 # 给最新的提交打标签
git tag v0.9 '序列化ID' # 对历史提交打标签git tag -a v0.8 -m "给标签添加描述" '序列化ID'

image.png
image.png
image.png

# 查看标签及其信息
git tag # 根据英文单词排序,而不是时间cat .git/refs/tags/v1.0 # tree .git --->  refs -- tag
git cat-file -p '序列化ID'git show <版本号># 查看远程标签
git ls-remote --tags

image.png
image.png
image.png
image.png
image.png

# 推送标签
git push origin v1.0
git push origin --tags # 推送全部标签

image.png
image.png

# 删除标签
git tag -d <tagName>
git tag -f -d <tagName> # 强制删除# 删除远程标签
git push origin :<tagName> # 删除本地及远程的标签
git push origin :refs/tags/<tagName>

image.png
image.png
image.png

二、多人协作实战

异分支开发

场景:两位开发者各自在自己的分支上开发。B开发突然生病,需要A开发帮助B开发完成开发任务。B开发病愈回来继续完成自己的开发工作。

# 阶段一:A开发
git checkout master
git pull # 获取最新版本代码
git checkout -b feature-a
vim function1
git add function1
git commit -m "阶段一:A开发 推送"
git push # error
git push origin feature-a # <remote> <branchName> 若远程分支不存在将新建git merge --no-ff -m "merge master" master # 没有冲突-合并成功git checkout master
git merge --no-ff -m "merge feature-a" feature-a
# 阶段一:B开发
git checkout master
git pull # A开发已经提交,master版本已经领先
git checkout -b feature-b
vim function2
git add function2
git commit -m "阶段一:B开发 推送"
git push # error
git push origin feature-b # 本地与远程分支未建立链接(可push,不可pull)

# 阶段二:A开发 帮助 B开发 完成任务
git branch -a
git pull
git checkout -b feature-b origin/feature-b
vim function2
git add function2
git commit -m "阶段二:A开发 帮助 B开发 完成任务"
git push

# 阶段三:B开发继续完成开发任务
git pull # error:feature-b 未建立链接
git branch -vv # 查看是否有链接(未链接)
git branch --set-upstream-to = origin/feature-b feature-b # 手动建立链接
git pull
vim function2
git add function2
git commit -m "阶段三:B开发继续完成开发任务"
git pushgit merge master # 有冲突就解决
git add .
git commit -m "解决冲突"git checkout master
git merge --no-ff -m "merge feature-b" feature-b

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

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

相关文章

MVCC【重点】

参考链接 [1] https://www.bilibili.com/video/BV1YD4y1J7Qq/?spm_id_from333.1007.top_right_bar_window_history.content.click&vd_source0cb0c5881f5c7d76e7580fbd2f551074 [2]https://www.cnblogs.com/jelly12345/p/14889331.html [3]https://xiaolincoding.com/mysql…

基于频率增强的数据增广的视觉语言导航方法(VLN论文阅读)

基于频率增强的数据增广的视觉语言导航方法&#xff08;VLN论文阅读&#xff09; 本文提出的方法很简单&#xff0c;将原始图像增加其他随机图像的高频信息&#xff0c;得到增强的图像作为新的样本&#xff0c;与原始的样本交替训练。背后的动机是&#xff0c;vln模型对高频信息…

TV-SAM 新型零样本医学图像分割算法:GPT-4语言处理 + GLIP视觉理解 + SAM分割技术

TV-SAM 新型零样本医学图像分割算法&#xff1a;GPT-4语言处理 GLIP视觉理解 SAM分割技术 提出背景TV-SAM 方法论 提出背景 论文&#xff1a;https://arxiv.org/ftp/arxiv/papers/2402/2402.15759.pdf 代码&#xff1a;https://github.com/JZK00/TV-SAM 利用了GPT-4的强大语…

TCP/IP-常用网络协议自定义结构体

1、TCP/IP模型&#xff1a; 2、TCP/IP- 各层级网络协议&#xff08;从下往上&#xff09;&#xff1a; 1&#xff09;数据链路层&#xff1a; ARP: 地址解析协议&#xff0c;用IP地址获取MAC地址的协议&#xff0c;通过ip的地址获取mac地 …

【最新】如何将idea上的项目推送到gitee

1.打开Gitee&#xff0c;在首页&#xff0c;点击“”&#xff0c;创建一个仓库 2.填写仓库基本信息 3.下拉&#xff0c;点击“创建”&#xff0c;出现下方页面&#xff0c;证明仓库创建成功。 4.打开idea&#xff0c;下载gitee的插件&#xff08;此处默认已经下载git&#xff0…

基于React, Redux实现的俄罗斯方块游戏及源码

分享一个俄罗斯方块游戏游戏框架使用的是 React Redux&#xff0c;其中再加入了 Immutable&#xff0c;用它的实例来做来Redux的state。&#xff08;有关React和Redux的介绍可以看 安装 npm install运行 npm start浏览自动打开 http://127.0.0.1:8080/ 打包编译 npm run …

T - SQL使用事务 及 在Winform使用事务

事务适用场景 1 事务使用在存储过程中&#xff0c;直接在数据库中进行编写 2 事务使用在Winfrom项目中 SQl&#xff1a;使用事务转账操作的实例 一般都会找一个变量记录错误的个数&#xff0c;error记录上一句sql的错误和错误编号 declare errornum int 0 -- 定义…

selenium-激活pycharm,以及在pycharm中使用selenium时标红报错问题处理

激活pycharm&#xff1a;http://idea.955code.com/ 01 pycharm中导入selenium报错 现象: pycharm中输入from selenium import webdriver, selenium标红 原因1: pycharm使用的虚拟环境中没有安装selenium&#xff1a; 解决方法: 在pycharm中通过设置或terminal面板重新安装s…

nosql的注入

一、SQL注入数据库分类 关系型数据库 mysql oracle sqlserver 非关系型数据库 key-value redis MongoDB&#xff08;not only sql&#xff09; 二、MongoDB环境搭建 自己官网下载 Download MongoDB Community Server | MongoDB 其中Mongod.exe是它的一个启动 加上数据库&…

本届挑战赛亚军方案:面向微服务架构系统中无标注、多模态运维数据的异常检测、根因定位与可解释性分析

CheerX团队来自于南瑞研究院系统平台研发中心&#xff0c;中心主要从事NUSP电力自动化通用软件平台的关键技术研究与软件研发。 选题分析 图1 研究现状 本次CheerX团队的选题紧密贴合了目前的运维现状。实际运维中存在多种问题导致运维系统的不可用。比如故障发生时&#xff…

[设计模式Java实现附plantuml源码~行为型] 对象状态及其转换——状态模式

前言&#xff1a; 为什么之前写过Golang 版的设计模式&#xff0c;还在重新写Java 版&#xff1f; 答&#xff1a;因为对于我而言&#xff0c;当然也希望对正在学习的大伙有帮助。Java作为一门纯面向对象的语言&#xff0c;更适合用于学习设计模式。 为什么类图要附上uml 因为很…

基于JAVAEE+Eclipse+Tomcat+Mysql开发的的停车场管理系统

基于JAVAEEEclipseTomcatMysql开发的的停车场管理系统 项目介绍&#x1f481;&#x1f3fb; 如今&#xff0c;我国现代化发展迅速&#xff0c;人口比例急剧上升&#xff0c;在一些大型的商场&#xff0c;显得就格外拥挤&#xff0c;私家车的数量越来越多&#xff0c;商场停车难…

【深度学习】Pytorch 教程(十四):PyTorch数据结构:6、数据集(Dataset)与数据加载器(DataLoader):自定义鸢尾花数据类

文章目录 一、前言二、实验环境三、PyTorch数据结构1、Tensor&#xff08;张量&#xff09;1. 维度&#xff08;Dimensions&#xff09;2. 数据类型&#xff08;Data Types&#xff09;3. GPU加速&#xff08;GPU Acceleration&#xff09; 2、张量的数学运算1. 向量运算2. 矩阵…

高性能图表组件LightningChart .NET v11.0发布——增强DPI感知能力

LightningChart完全由GPU加速&#xff0c;并且性能经过优化&#xff0c;可用于实时显示海量数据-超过10亿个数据点。 LightningChart包括广泛的2D&#xff0c;高级3D&#xff0c;Polar&#xff0c;Smith&#xff0c;3D饼/甜甜圈&#xff0c;地理地图和GIS图表以及适用于科学&am…

华为---RSTP(四)---RSTP的保护功能简介和示例配置

目录 1. 技术背景 2. RSTP的保护功能 3. BPDU保护机制原理和配置命令 3.1 BPDU保护机制原理 3.2 BPDU保护机制配置命令 3.3 BPDU保护机制配置步骤 4. 根保护机制原理和配置命令 4.1 根保护机制原理 4.2 根保护机制配置命令 4.3 根保护机制配置步骤 5. 环路保护机…

php基础学习之错误处理(其二)

在实际应用中&#xff0c;开发者当然不希望把自己开发的程序的错误暴露给用户&#xff0c;一方面会动摇客户对己方的信心&#xff0c;另一方面容易被攻击者抓住漏洞实施攻击&#xff0c;同时开发者本身需要及时收集错误&#xff0c;因此需要合理的设置错误显示与记录错误日志 一…

Linux笔记--用户与用户组

Linux系统是一个多用户多任务的操作系统&#xff0c;任何一个要使用系统资源的用户&#xff0c;都必须首先向系统管理员(root)申请一个账号&#xff0c;然后以这个账号的身份进入系统。 用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪&#xff0c;并控制他们对系…

3D数字孪生

数字孪生&#xff08;Digital Twin&#xff09;是物理对象、流程或系统的虚拟复制品&#xff0c;用于监控、分析和优化现实世界的对应物。 这些数字孪生在制造、工程和城市规划等领域变得越来越重要&#xff0c;因为它们使我们能够在现实世界中实施改变之前模拟和测试不同的场景…

从业务角度出发,实现UniApp二次开发的最佳实践

UniApp作为一款跨平台的移动应用开发框架&#xff0c;为开发者提供了在多个平台上构建应用的便利性。在这篇文章中&#xff0c;我们将深入探讨UniApp的二次开发&#xff0c;以及如何通过定制化来满足你的独特需求。 1.了解UniApp基础 1.1项目结构和文件 熟悉UniApp的项目结构…

动态规划(题目提升)

[NOIP2012 普及组] 摆花 方法一&#xff1a;记忆化搜索 何为记忆化搜素&#xff1a;就是使用递归函数对每次得到的结果进行保存&#xff0c;下次遇到就直接输出即可 那么这个题目使用递归&#xff08;DFS&#xff09;是怎样的&#xff1f; 首先我们需要搞清楚几个坑点&#x…