当前位置: 首页 > news >正文

Git 和 Github 的使用

补充内容:EasyHPC - Git入门教程【笔记】

文章目录

  • 常用命令
    • 配置信息
    • 分支管理
    • 管理仓库
  • 概念理解
  • SSH 密钥
    • HTTPS 和 SSH 的区别
    • 在本地生成 SSH key
    • 在 Github 上添加 SSH key
  • 使用的例子
    • 同步本地仓库的修改到远程仓库
    • 拉取远程仓库的修改到本地仓库
    • 拉取远程仓库的分支并修改提交
    • 将本地分支提交到不同的远程分支
    • 将本地分支提交到不同的本地分支
  • 参考

常用命令

配置信息

git config --global user.name "用户名"	# 配置用户名
git config --global user.email "邮箱"	# 配置邮箱地址
git config -l 	# 查看配置信息

分支管理

git branch		# 显示本地仓库中的分支列表,当前的分支前会有一个星号标记。
git branch -r	# 显示远程仓库中的分支列表。
git branch -a	# 显示本地和远程仓库中的所有分支列表。
git branch <name>	# 创建分支
git checkout <name> # 切换分支

管理仓库

git init			# 初始化 git 仓库
git clone <repo>	# 从 git 仓库中克隆项目
git status			# 查看 git 当前状态
git status -s		# 查看简易信息
git diff			# 查看 git status 的详细信息
git add .			# 将添加的文件或修改的文件加入本地的缓存区
git commit -m '注释'		# 将缓存区内容添加到仓库中
git commit -am '注释'	# 跳过 add 过程	
git pull			# 拉取 master 分支上的最新代码
git pull origin A	# 拉取指定分支上的最新代码

概念理解

  • 分支(branch)是用于在同一代码库中并行开发和维护不同功能的独立版本。
  • 分叉(fork)是用于在开源项目中个人修改和贡献的方式,将主仓库的代码复制到自己的仓库中进行开发。
  • 获取(fetch)用于将远程仓库的修改下载到本地,但不进行合并。
  • 合并(merge)用于将远程仓库的修改与本地分支进行合并。
  • 变基(rebase)用于将一系列提交应用于另一个分支,并整理提交历史。
  • 克隆(clone)用于从远程仓库创建本地仓库的完整复制。

对分支(branch)和分叉(fork)的个人理解:去别人的开源仓库,把项目 fork 到自己的仓库,在自己的仓库里创建 branch 开发新的功能。

SSH 密钥

HTTPS 和 SSH 的区别

  1. HTTPS 可以随意克隆 Github 上的项目,而不管是谁的;而 SSH 则是,你必须是你要克隆的项目的拥有者或管理员,且需要先添加 SSH key,否则无法克隆。

  2. HTTPS 在 push 的时候是需要验证用户名和密码的;而 SSH 在 push 的时候,是不需要输入用户名的,如果配置 SSH key 的时候设置了密码,则需要输入密码的,否则直接是不需要输入密码的。

在本地生成 SSH key

查看本地是否有已经生成好的 ssh key:

cat ~/.ssh/id_rsa.pub

若有,则先删除:

cd ~
rm -rf .ssh

重新生成 ssh key:

ssh-keygen -t rsa -C "邮箱"

代码参数含义:

  • t 指定密钥类型,默认是 rsa ,可以省略。
  • C 设置注释文字,比如邮箱。
  • f 指定密钥文件存储文件名。

接着,连续按回车。

在.ssh目录下得到了两个文件:id_rsa(生成的私钥)和 id_rsa.pub(生成的公钥)。

查看新生成的 ssh key:

cat ~/.ssh/id_rsa.pub

在 Github 上添加 SSH key

登录GitHub,点头像,点Settings,点SSH and GPG keys,点New SSH key,输入Title和Key。

Title 可以自定义,Key 就是 cat ~/.ssh/id_rsa.pub 输出的内容。

点击 Add SSH key。

测试是否设置成功:

ssh -T git@github.com

设置成功后,即可不需要账号密码 clone 和 push 代码。

使用的例子

随便找了一个开源项目,fork 一份。

在本地 clone 一份:

git clone git@github.com:zhulu506/demo.git

同步本地仓库的修改到远程仓库

在本地的 demo 项目里新建一个 .txt 文件,提交更改:

cd demo/					    # 进入 demo 项目
echo "hello world" > new.txt	# 新建一个 .txt 文件
git add new.txt					# 添加跟踪
git commit -m 'add new.txt'		# 提交到本地仓库
git push					    # 将本地提交同步到远程仓库

拉取远程仓库的修改到本地仓库

直接在 Github 网页上修改 .txt 文件。

从远程仓库拉取更新并合并到当前分支:

git pull

git pull 相当于先运行 git fetch 获取远程更新,再运行 git merge 合并更新到当前分支。

拉取远程仓库的分支并修改提交

情况:拉取远程仓库后,在远程仓库创建了新的分支 v1。

# 最初在本地分支 master
git pull			# 拉取 master 分支上的最新代码
git checkout v1		# 切换到分支 v1,跟踪远程分支 v1
touch new_file		# 修改动作
git add .
git commit -m 'add new_file'
git push

将本地分支提交到不同的远程分支

情况:远程仓库存在分支 v2,将本地分支 v1 的更改提交到 v2。

# 最初在本地分支 v1
git pull
touch new_file
git add .
git commit -m 'add new_file'
git push origin v1:v2

将本地分支推送到不同远程分支:git push <远程仓库名称> <本地分支名称>:<远程分支名称>

将本地分支提交到不同的本地分支

情况:本地存在分支 v1,将修改提交到本地分支 v3,再提交到远程分支 v3。

# 最初在本地分支 v1,远程仓库中还没有分支 v3。
vi new_file	# 修改动作
git status	# 将 v1 分支上的修改暂存起来
git checkout -b v3	# 在本地新建分支
git stash pop		# 将暂存的修改放到新建分支中 
git add .
git commit -m 'updata new_file'
git push -u origin v3	# 将提交的内容 push 到远程分支 v3 

如果远程仓库没有该分支,则需要设置 upstream:git push --set-upstream origin target-branch-name,或简写为:git push -u origin target-branch-name

参考

  • GitHub 文档
  • Git分支(branch)和分叉(fork)的区别
  • Git 两个重要概念,即Forking(派生)和Branching(分支),以及它们在GitHub上的应用和区别
  • 设置或重置ssh key
  • Github 生成SSH秘钥(详细教程)
  • Github配置ssh key的步骤(大白话+包含原理解释)
  • Linux/Ubuntu下使用git从Github拉取项目文件、提交修改后文件的完整流程演示
  • github 配置使用 personal access token 认证
  • Git 教程 | 将本地修改后的文件推送到 Github 指定远程分支上
  • Git:将当前修改的内容提交到新的分支上
http://www.lryc.cn/news/367526.html

相关文章:

  • 学习分享-断路器Hystrix与Sentinel的区别
  • 社区物资交易互助平台的设计
  • 19-Nacos-服务实例的权重设置
  • R语言数据探索和分析23-公共物品问卷分析
  • Webix前端界面框架:深度解析与应用实践
  • Qt基于SQLite数据库的增删查改demo
  • 新书推荐:2.2.4 第11练:消息循环
  • MASA:匹配一切、分割一切、跟踪一切
  • Websocket前端传参:深度解析与实战应用
  • 造假高手——faker
  • 前端工程化工具系列(十二)—— PostCSS(v8.4.38):CSS 转换工具
  • Scanpy(3)单细胞数据分析常规流程
  • 【Stable Diffusion】(基础篇二)—— Stable Diffusion图形界面介绍和基本使用流程
  • OpenCv之简单的人脸识别项目(动态处理页面)
  • 【Linux】进程间通信
  • UI与前端:揭秘两者的微妙差异
  • idea如何根据路径快速在项目中快速打卡该页面
  • 探索成功者的特质——俞敏洪的观点启示
  • MCU的环形FIFO
  • 使用proteus仿真51单片机的流水灯实现
  • 【漏洞复现】Apache OFBiz 路径遍历导致RCE漏洞(CVE-2024-36104)
  • 数据库表中创建字段查询出来却为NULL?
  • 缓存方法返回值
  • 【十大排序算法】快速排序
  • linux系统ubuntu中在命令行中打开图形界面的文件夹
  • 【C++11数据结构与算法】C++ 栈
  • pdf文件如何防篡改内容
  • QT 音乐播放器【二】 歌词同步+滚动+特效
  • 关于怎么用Cubemx生成的USBHID设备实现读取一体的鼠标键盘设备(改进版)
  • Soildworks学习笔记(二)