Git学习教程(更新中)

news2024/11/20 1:22:42

持续更新完善中…

1 Git简介

1.1 Git是什么?

  Git是一个开源的分布式版本控制系统,由Linus Torvalds创建,用于有效、高速地处理从小到大的项目版本管理。它能够记录项目文件的变更历史,让多个开发者可以协作开发同一个项目,同时保持代码的一致性和可追溯性。

1.2 Git的原理

  Git允许用户在本地存储完整的代码历史记录,并支持在本地进行版本控制操作,如提交、分支、合并等。当你在本地进行更改并提交后,这些更改会被保存在本地仓库中。通过推送(push)操作,你可以将本地的更改同步到远程仓库,而拉取(pull)操作则可以将远程仓库的更新合并到本地。Git通过这种方式实现了高效的代码版本追踪和团队协作。

1.3 Git工作机制

Git包含四个重要区域:

  1. 工作区(workspace):这是开发者编写代码的目录,例如 D:/projects/test
  2. 缓存区(index):位于 .git 文件夹下的某个位置,通常创建在工作区中。例如,如果工作区是 D:/projects/test,则 .git 目录会位于 D:/projects/test/.git。缓存区在 .git 目录下的具体位置无需了解,只需知道其存在即可,后续将详细说明其作用。
  3. 本地仓库(Repository):也位于 .git 目录下,有时被称为“版本库”或“仓库区”。类似缓存区,其具体位置也无需关注,后续会说明它的功能。
  4. 远程仓库(Remote):存储在 GitHub、Gitee 等平台上的仓库。
    Git工作机制
Git工作机制

2 Git使用教程

2.1 Git安装教程

  你开始使用前,需要将Git安装在你的计算机上, 即便已经安装,最好将它升级到最新的版本。
安装教程参考:https://blog.csdn.net/qq_45281589/article/details/134650456?fromshare=blogdetail&sharetype=blogdetail&sharerId=134650456&sharerefer=PC&sharesource=qq_50993557&sharefrom=from_link 和 https://py-wang.blog.csdn.net/article/details/120767020?fromshare=blogdetail&sharetype=blogdetail&sharerId=120767020&sharerefer=PC&sharesource=qq_50993557&sharefrom=from_link。

2.2 常用口令

  1. git init,初始化一个新的 Git 仓库。当你在一个新项目中运行 git init 时,Git 会在项目目录中创建一个隐藏的 .git 文件夹,这个文件夹包含了所有跟踪项目历史的文件。
  2. git clone [repository-url],克隆一个远程仓库到本地。如果你想下载一个项目的所有代码和版本历史,可以使用 git clone 命令。它会在本地创建一个新的文件夹,并将远程仓库的内容复制到这个文件夹中。
  3. git fetch,从远程仓库获取最新的数据,但不会自动合并到本地分支。git fetch 会从远程仓库拉取最新的数据,但不会自动合并到你的当前分支。这可以让你在合并之前先查看远程分支的状态。
  4. git add [file],将文件添加到暂存区(staging area)。在 Git 中,你需要先将文件添加到暂存区,然后才能进行提交。git add 命令就是用来将文件标记为“准备好提交”的状态。
  5. git commit -m "[message]",将暂存区的文件提交到本地仓库。提交是将你添加到暂存区的文件和所做的更改保存到本地仓库的历史记录中。-m 参数后面跟着的是你为这次提交写的描述信息。
  6. git status,查看当前仓库的状态。这个命令会显示哪些文件被修改了、哪些文件被添加到了暂存区、以及哪些文件还没有被跟踪。
  7. git branch,列出、创建或删除分支。分支是 Git 中的一个核心概念,它允许你从主开发线(通常是 master 或 main 分支)中分离出来进行开发,而不会影响主分支。
  8. git checkout [branch-name],切换到指定的分支。如果你想在不同的分支之间切换工作,可以使用 。
  9. git pull,用于从远程获取代码并合并本地的版本。git pull 其实就是 git fetch 和 git merge 的简写,先从远程仓库获取最新的提交记录,然后将这些提交记录合并到你当前的分支中。
  10. git push,用于从将本地的分支版本上传到远程并合并。

2.3 配置Git

   安装完毕 Git 后,第一件事就是设置提交的用户名和邮件地址。因为每次提交时,Git 都需要记录提交作者和邮件地址的信息。要进行配置,首先打开 Git,进入对应的项目文件夹,然后右键点击文件夹,在弹出的菜单中选择“Git Bash Here”,参考:https://cloud.tencent.com/developer/article/2302110。

2.3.1 配置全局用户名和邮箱

以Github账户用户名和邮箱为例:

git config --global user.name "Your Name"
git config --global user.email "email@example.com"

  使用--global时,配置的信息会被视为Git的全局配置。在需要读取用户名和邮箱地址的任何位置,Git默认会使用配置的值。如果希望针对不同项目使用不同的用户名和邮箱地址,比如在自己的GitHub上使用私人邮箱而非公司邮箱,可以简单地切换到该项目的根目录(即包含.git文件夹的目录)进行配置。

git config  user.name "你的名字"
git config  user.email zinyan@example.com

查看是否配置成功

git config user.name
git config user.email

2.3.2 配置ssh

  Git支持多种传输协议,其中最常用的是https和ssh,这些协议旨在确保数据传输的安全性。设置SSH密钥的目的是为了避免每次提交代码时输入用户名和密码,同时确保传输的安全性。虽然设置SSH密钥不是必须的,但如果不设置,每次提交代码时都需要输入账号和密码。如果不使用密码,是否意味着任何人都可以将代码推送到你的仓库呢?一旦设置了公钥,GitHub可以通过公钥识别你的机器,并确认你是可信用户,从而避免每次与GitHub通信时都需输入密码。
  我们在将项目推送(push)到GitHub时,如果使用https方式,每次都需要输入账号和密码,非常麻烦。而采用ssh方式后,就不再需要输入账号和密码,只需在GitHub账户下配置一个ssh密钥即可。参考:https://blog.csdn.net/weixin_42310154/article/details/118340458?fromshare=blogdetail&sharetype=blogdetail&sharerId=118340458&sharerefer=PC&sharesource=qq_50993557&sharefrom=from_link。
  Git 使用 SSH 配置的初始步骤: 1)使用秘钥生成工具生成 rsa 秘钥和公钥;2)将rsa公钥添加到代码托管平台;3)将rsa秘钥添加到 ssh-agent 中,并为ssh客户端指定使用的秘钥文件。
具体步骤如下:
Step 1: 检查本地主机是否已经存在ssh key。

cd ~/.ssh
ls
//看是否存在 id_rsa 和 id_rsa.pub文件,如果存在,说明已经有SSH Key

Step 2: 如果不存在ssh key,使用如下命令生成。

ssh-keygen -t rsa -C "xxx@xxx.com"
//执行后一直回车即可

Step 3: 获取ssh key公钥内容(id_rsa.pub),并复制内容。

cd ~/.ssh
cat id_rsa.pub

Step 4: Github账号上进入Settings设置添加公钥,添加ssh key,把刚才复制的内容粘贴上去保存即可。
Step 5: 验证是否设置成功,设置成功后,即可不需要账号密码clone和push代码。

 ssh -T git@github.com
 注意之后在clone仓库的时候要使用ssh的url,而不是https!

例如:git clone git@github.com:username/repo.git,这里的 username 是 GitHub 上的用户名,repo 是仓库的名称。确保你使用的是正确的 ssh url,而不是https url。

2.3.3 验证原理

  登录的安全性由非对称加密保证。在生成密钥时,会同时生成一对密钥——一个公钥和一个私钥,通常在Git中命名为id_rsa.pub和id_rsa。那么,如何使用这对密钥进行验证呢?首先,本地生成密钥对,将公钥放置在远程主机上,私钥保存在本地主机。当本地主机需要登录远程主机时,它会向远程主机发送登录请求。远程主机收到请求后,随机生成一个字符串,并用公钥加密后返回给本地主机。本地主机收到该加密字符串后,使用保存在本地的私钥进行解密,并将解密后的字符串发送回远程主机。远程主机比对解密后的字符串与原始字符串是否一致,如果一致,则认证成功。

2.3.4 通俗解释

  配置SSH密钥是针对每台主机的。例如,当我在某台主机上使用Git操作远程仓库,并希望通过SSH协议push代码而不输入账号密码时,就需要配置SSH密钥。上传的密钥是当前主机的SSH公钥。如果更换为另一台主机,想要实现无密登录,则需要重新配置。
下面解释开头提出的问题:
(1)为什么要配置? 配置后可以在push代码时免去反复输入GitHub账号密码,更加方便。
(2)每台主机都要配置吗? 是的,每当使用新主机进行Git远程操作并希望实现无密登录时,都需要配置。不是每个账号配置一次就够,而是每台主机都需要配置。
(3)配置后为什么就不用密码了? 配置时,将当前主机的公钥添加到GitHub账号中,相当于将主机与账号关联。此时,GitHub信任该主机,认为是账号的主人在操作。所以,在这台主机上使用Git时,即使没有登录GitHub,也能直接push代码到远程仓库。但请注意,不能随意push代码到任何仓库,只能推送到自己的仓库或有权限的仓库。

3 将本地项目上传到自己的Github/Gitee仓库中

  1. 注册Github/Gitee账号并创建一个仓库,参考:【教程】GitHub新建仓库新手教程和如何用gitee创建仓库。
  2. 如果1)使用Git,就打开对应的项目文件夹,在项目文件夹里面点击鼠标右键,在鼠标右击弹出的菜单中,点击Git Bash Here;如果2)使用Pycharm的终端,需切换到项目文件夹路径,这里希望在PyCharm运行bash脚本,参考:【已解决】【Pycharm】如何在Pycharm中运行Bash命令行或.sh文件。
  3. 使用Git,以上传一个word文档为例,在存放文档的文件夹中,通过命令行窗口输入:git init,初始化一个新的 Git 仓库。
  4. 在 Github/Gitee 中 我们刚刚新建的仓库里,去复制仓库的地址,例如:git@github.com:xxx/xxx.git
  5. 在命令窗口中输入:git remote add origin git@github.com:xxx/xxx.git,将远程仓库地址添加到本地仓库的远程关联中,origin 是一个远程仓库的默认名称,这里的 origin 可以被替换成任何你想要的名字,但 origin 是最常用的默认名称。如果你有多个远程仓库,你可以添加更多远程仓库并给它们指定不同的名字。例如,git remote add upstream git@github.com:xxx/xxx.git,这样,就可以使用 upstream 来引用这个新的远程仓库了。不过,origin 通常用于你拥有写权限的仓库,而 upstream 通常用于你只有读权限的原始仓库。
  6. 在命令窗口中输入:git pull origin master,拉取远程仓库内容(这一步通常不需要),从远程仓库拉取内容并合并到本地。但在这个场景中,由于刚刚初始化了一个新的仓库,远程仓库是空的,所以这一步会失败,除非你想要先从远程仓库拉取一些已有的内容。
  7. 在命令窗口中输入:git add .,将当前目录下的所有文件添加到Git的跟踪列表中。
  8. 在命令窗口中输入:git commit -m “提交项目”,将跟踪的文件提交到本地仓库。这里的提交信息可以更具描述性,比如“添加Word文档”。
  9. 在命令窗口中输入:git push origin master,将本地的提交推送到远程仓库的master分支。如果默认分支名是main,使用git push origin main
    注意:1)如果你clone下来一个别人的仓库,在此基础上完成你的代码,推送到自己的仓库可能遇到如下问题:error: remote origin already exists.表示远程仓库已存在。因此,先输入git remote rm origin 删除关联的origin的远程库,然后关联自己的仓库git remote add origin git@github.com:xxx/xxx.git,最后git push origin master,这样就推送到自己的仓库了。参考:https://blog.csdn.net/weixin_43916997/article/details/123645376?fromshare=blogdetail&sharetype=blogdetail&sharerId=123645376&sharerefer=PC&sharesource=qq_50993557&sharefrom=from_link。2)git 使用报错: fatal: Couldn’t find remote ref master的解决方法,原来远程仓库为空时,你直接pull的话会报错,参考:https://blog.csdn.net/weixin_43205760/article/details/103361249?fromshare=blogdetail&sharetype=blogdetail&sharerId=103361249&sharerefer=PC&sharesource=qq_50993557&sharefrom=from_link。
  10. 在GitHub或Gitee仓库页面刷新,你将看到本地项目已经上传到了远程仓库中 。
  11. 如果你想要在另一个位置获取这个仓库的副本,可以使用git clone https://github.com/xxx/xxx.git
  12. 如果需要删除文件目录下的.git文件(通常是当你想将项目从一个Git仓库中移除时),可以使用rm -rf .git。但请注意,这会删除Git的配置和历史记录,使得该目录不再是一个Git仓库。

4 使用Git修改代码(基于Pycharm)

  1. 在 GitHub 或 Gitee 上通过 git clone 下载开源代码,或者在相关目录中创建自己的代码项目。需要注意,如果使用 SSH 方式下载,需提前配置 SSH 密钥。通常,开源代码仓库已经初始化了 Git 环境,例如:git clone https://github.com/milesial/Pytorch-UNet.git 或者 git clone git@github.com:milesial/Pytorch-UNet.git
  2. 开始的时候需要进行初始化设置,参考:git pycharm的使用 连接github
  3. 查看分支列表:git branch ,分支前面的 * 表示当前所处的分支。
  4. 创建新分支:git branch 分支名称,基于当前分支,创建一个新的分支,此时,新分支中的代码和当前分支完全一致。
  5. . 切换分支:使用命令 git checkout 分支名称 切换到指定分支,在该分支上修改代码而不影响原始代码。此外,可以通过 git checkout -b 分支名称 快速创建并切换到新分支。
  6. 修改项目中的相关代码。
  7. 将更改提交到缓存区:缓存整个项目:git add .,缓存部分文件:git add "xxx.py"
  8. 提交更改到本地仓库:使用命令 git commit -m "修改 xxx.py",将更新后的项目提交到当前分支。
  9. 查看仓库状态:使用 git status 检查文件的修改、添加或删除状态,以及是否存在未提交的更改。
  10. 回滚到某个提交:回退到上一个版本:git reset --hard HEAD^,回退到前三次提交之前:git reset --hard HEAD~3,将更改保留在缓存区:git reset --soft HEAD^
  11. 合并分支: 切换到主分支:git checkout master,合并功能分支:git merge 分支名称
  12. 删除已完成的功能分支: 当功能分支的代码已合并到主分支后,可使用命令 git branch -d 分支名称 删除功能分支。
  13. 重命名本地分支: 使用 git branch -m 旧分支名称 新分支名称 修改分支名称。
  14. 退出 Bash 环境: 使用命令 exit 退出。

5 Github仓库自动更新

  1. Github仓库的自动更新结合 4 使用Git修改代码(基于Pycharm)3 将本地项目上传到自己的Github/Gitee仓库中 步骤不变,更新了train.py, 就可以仅仅更新train脚本, git add train.py。步骤和本地项目上传到自己的Github/Gitee仓库一模一样。
  2. 在一个仓库中可以分多次提交多个文件夹,提交方式和上述 3 将本地项目上传到自己的Github/Gitee仓库中步骤相同。

6 Git切断与远程仓库的连接

  1. 连接远程仓库:git remote add origin 仓库地址
  2. 查看远程连接:git remote -v
  3. git取消与远程仓库的连接:git remote remove origin
  4. 初始化仓库:git init
  5. 连接新仓库:git remote add origin 仓库地址

7 当需要修改github仓库中的文件名的时候

  1. 打开 Git Bash,输入命令:git clone https://github.com/xxx/xxx.git
  2. cd 到文件所在目录:$ cd XXX/.
  3. 重命名文件: git mv oldname newname
  4. 再向远程仓库提交: git commit -m "newname"
  5. 更新服务器:git push origin master
    参考:https://blog.csdn.net/wjinjie/article/details/116856440

8 删除Github某个文件夹

  1. 将远程仓库里面的项目拉下来:git pull origin master
  2. 查看有哪些文件夹:dir
  3. 删除target文件夹:git rm -r --cached target
  4. 提交,添加操作说明:git commit -m '删除了target'
  5. 将本次更改更新到github项目上去: git push -u origin master
    参考:https://blog.csdn.net/wudinaniya/article/details/77508229?fromshare=blogdetail&sharetype=blogdetail&sharerId=77508229&sharerefer=PC&sharesource=qq_50993557&sharefrom=from_link

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

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

相关文章

TON商城与Telegram App:生态融合与去中心化未来的精彩碰撞

随着区块链技术的快速发展,去中心化应用(DApp)逐渐成为了数字生态的重要组成部分。而Telegram作为全球领先的即时通讯应用,不仅仅满足于传统的社交功能,更在区块链领域大胆探索,推出了基于其去中心化网络的…

〔 MySQL 〕数据类型

目录 1.数据类型分类 2 数值类型 2.1 tinyint类型 2.2 bit类型 2.3 小数类型 2.3.1 float 2.3.2 decimal 3 字符串类型 3.1 char 3.2 varchar 3.3 char和varchar比较 4 日期和时间类型 5 enum和set mysql表中建立属性列: 列名称,类型在后 n…

两行命令搭建深度学习环境(Docker/torch2.5.1+cu118/命令行美化+插件),含完整的 Docker 安装步骤

深度学习环境的配置过于繁琐,所以我制作了两个基础的镜像,希望可以帮助大家节省时间,你可以选择其中一种进行安装,版本说明: base 版本基于 pytorch/pytorch:2.5.1-cuda11.8-cudnn9-devel,默认 python 版本…

免费实时图片编辑工具:MagicQuill

参看: https://huggingface.co/spaces/AI4Editing/MagicQuill 人工智能交互式图像编辑:可以制定涂改增加删除

前端学习八股资料CSS(五)

更多详情:爱米的前端小笔记,更多前端内容,等你来看!这些都是利用下班时间整理的,整理不易,大家多多👍💛➕🤔哦!你们的支持才是我不断更新的动力!找…

翼鸥教育:从OceanBase V3.1.4 到 V4.2.1,8套核心集群升级实践

引言:自2021年起,翼鸥教育便开始应用OceanBase社区版,两年间,先后部署了总计12套生产集群,其中核心集群占比超过四分之三,所承载的数据量已突破30TB。自2022年10月,OceanBase 社区发布了4.2.x 版…

如何在 Ubuntu 22.04 上安装 ownCloud

简介 ownCloud 是一个开源的个人云存储平台,它允许用户在本地服务器上存储和同步文件,提供了一个类似于 Dropbox 或 Google Drive 的服务,但是更加注重隐私和数据控制。以下是 ownCloud 的一些基础使用简介: 文件存储&#xff1…

使用Mybatis向Mysql中的插入Point类型的数据全方位解析

1. 结果 希望每一个能够看到结果的人都能自己装载进去!加油! 2.代码 2.1TestMapper import org.apache.ibatis.annotations.*; import java.util.Date; import java.util.List;/*** author Administrator*/ Mapper public interface TestMapper {/*…

web——sqliabs靶场——第六关——报错注入和布尔盲注

这一关还是使用报错注入和布尔盲注 一. 判断是否有sql注入 二. 判断注入的类型 是双引号的注入类型。 3.报错注入的检测 可以使用sql报错注入 4.查看库名 5. 查看表名 6.查看字段名 7. 查具体字段的内容 结束 布尔盲注 结束

鸿蒙实战:页面跳转传参

文章目录 1. 实战概述2. 实现步骤2.1 创建鸿蒙项目2.2 编写首页代码2.3 新建第二个页面 3. 测试效果4. 实战总结 1. 实战概述 本次实战,学习如何在HarmonyOS应用中实现页面间参数传递。首先创建项目,编写首页代码,实现按钮跳转至第二个页面并…

数据结构(基本概念及顺序表——c语言实现)

基本概念: 1、引入 程序数据结构算法 数据: 数值数据:能够直接参加运算的数据(数值,字符) 非数值数据:不能够直接参加运算的数据(字符串、图片等) 数据即是信息的载…

一.安装版本为19c的Oracle数据库管理系统(Oracle系列)

1.数据库版本信息: 版本信息: 或者直接由命令查出来: 2.操作系统的版本信息 3.安装包下载与上传 可以去oracle官网下载也可以从其他人的百度网盘链接中下载: 使用xftp工具或者其他的工具(mobaxterm)上传到l…

从 IDC 到云原生:稳定性提升 100%,成本下降 50%,热联集团的数字化转型与未来展望

作者:金峰(项良)、朱永林、赵世振(寰奕) 公司简介 杭州热联集团股份有限公司成立于 1997 年 10 月,是隶属杭州市实业投资集团的国有控股公司。公司专业从事国际、国内钢铁贸易黑色大宗商品及产业服务&…

说说软件工程中的“协程”

在软件工程中,协程(coroutine)是一种程序运行的方式,可以理解成“协作的线程”或“协作的函数”。以下是对协程的详细解释: 一、协程的基本概念 定义:协程是一组序列化的子过程,用户能像指挥家…

MinIO 的 S3 over RDMA 计划: 为高速人工智能数据基础设施设定对象存储新标准

随着 AI 和机器学习的需求不断加速,数据中心网络正在迅速发展以跟上步伐。对于许多企业来说,400GbE 甚至 800GbE 正在成为标准选择,因为数据密集型和时间敏感型 AI 工作负载需要高速、低延迟的数据传输。用于大型语言处理、实时分析和计算机视…

怀旧游戏打卡清单(TODO)

感觉忙碌了好久好久,真的好想休息一下。。 整理一下将来休息时候的打卡清单,不工作了去个海边狂打游戏,想想就惬意啊。当然,最好找个work from home,去海边找个酒店上班。挣钱休息两不误。。。 能不能实现另说&#xf…

《Python制作动态爱心粒子特效》

一、实现思路 粒子效果: – 使用Pygame模拟粒子运动,粒子会以爱心的轨迹分布并运动。爱心公式: 爱心的数学公式: x16sin 3 (t),y13cos(t)−5cos(2t)−2cos(3t)−cos(4t) 参数 t t 的范围决定爱心形状。 动态效果: 粒子…

使⽤MATLAB进⾏⽬标检测

目录 数据准备定义模型并训练用测试集评估性能推理过程⼀⾏代码查看⽹络结构⼀⾏代码转onnx结语 ⼈⽣苦短,我⽤MATLAB。 Pytorch在深度学习领域占据了半壁江⼭,最主要的原因是⽣态完善,⽽且api直观易⽤。但谁能想到现在MATLAB⽤起来⽐Pytorch…

word-毕业论文的每一章节的页眉单独设置为该章的题目怎么设置

在Microsoft Word中,为毕业论文的每个章节设置不同的页眉,通常需要使用“分节符”来分隔各个章节,然后在每个章节中单独设置页眉。以下是详细步骤: 使用分节符 插入分节符: 将光标放在每个章节的末尾(注意…

【简历】25届江苏二本JAVA简历:本末倒置,重点部分格式错误,不重要的写了一堆

简历总体说明 校招的第一法则就是必须要确定校招层次。 开发岗分为大中小厂,不同的层次对学校背景、时间点、项目和考点的要求都不太一样,所以必须要确定就业的层次。 这是一个25届二本同学的JAVA简历。 最近不知道怎么回事,看两份简历都…