首页 > 其他分享 >【git教程】快速掌握git

【git教程】快速掌握git

时间:2024-09-01 13:37:21浏览次数:10  
标签:教程 git 删除 掌握 -- 模块 远程 分支

@

目录


1.本地版本控制

1.1 在一个目录下建立仓库git init

git init

1.1.1 删除仓库

rm -rf .git

1.2 暂存区git add

1.2.1 保存到暂存区

  • 保存某个文件的修改到暂存区
git add <filename>
  • 全部保存到暂存区
git add .

1.2.2 撤销暂存区文件

  • 撤销某一个暂存区文件
git reset HEAD <filename>
  • 撤销所有暂存区文件
git reset HEAD~0

1.3 提交与回退

1.3.1 提交到版本库git commit

git commit -m "附加信息"

1.3.2 回退git reset

git reset--soft--mixed--hard三种参数可选,其中--mixed是默认方式,不同含义如下:

  • --soft:只重置HEAD指针的位置
  • --mixed:重置HEAD指针的位置,并清空git add命令的暂存区
  • --hard:重置HEAD指针的位置,清空git add命令的暂存区,并重置工作空间所有的更改

以下是git reset的几种用法:

  • 回退项目到指定版本
git reset <version>
  • 回退项目到上一个版本
git reset HEAD~1
  • 回退单一文件到上个版本
git reset HEAD~1 <filename>
  • 回退到上n个版本
git reset HEAD~n

1.4 删除

1.4.1 删除未跟踪的文件git clean

# 删除 untracked files
git clean -f
 
# 连 untracked 的目录也一起删掉
git clean -fd
 
# 连 gitignore 的untrack 文件/目录也一起删掉 (慎用,一般这个是用来删掉编译出来的 .o之类的文件用的)
git clean -xfd
 
# 在用上述 git clean 前,强烈建议加上 -n 参数来先看看会删掉哪些文件,防止重要文件被误删
git clean -nxfd
git clean -nf
git clean -nfd

1.4.2 删除已跟踪的文件git rm

git rm <filename>

1.5 检查

1.5.1 查看当前仓库状态git status

git status

1.5.2 查看操作日志git reflog

git reflog

1.5.3 查看此分支的提交日志git log

git log
  • 经过回退后,使用"git log"就看不到回退前的版本号了,但使用"git reflog"就可以查看

1.6 分支管理git branch

1.6.1 创建分支

git branch <name of local branch>

1.6.2 切换分支

git switch <name of local branch>

1.6.3 查看分支

git branch

1.6.4 合并分支(可能出现冲突,如两个分支都修改了同一文件)

git merge <name of local branch>
git merge --no-ff -m "附加信息" <name of local branch>

1.6.5 删除分支

git branch -d <name>
git branch -D <name>#强行删除,慎用

1.7 模块管理git submodule

1.7.1 添加子模块

git submodule add <URL of the submodule> <folder's name of the submodule>

使用此命令后,项目根目录下会自动添加.gitmodules文件,用来存放子模块的信息;同时,也会自动下载子模块仓库的主分支最新版本并用指定名字的目录去装载,如果未给出指定的名字,则使用子模块仓库的默认名字。

使用子模块的意义在于便捷地引用其他人的库。如果你需要对别人的库进行自己的修改,那么你完全没有必要使用submodule,因为你没有修改别人库的权限,你可以直接把别人的库克隆下来之后提交。如果你只是想使用而不需要更改,那么推荐你使用submodule,这样的话,在提交时,主项目不会记录子模块的更改。

1.7.2 查看子模块

git submodule

1.7.3 拉取子模块

  • 在克隆一个项目时直接拉取:
git clone https://github.com/yyy/xxx.git --recursive
  • 在克隆之后再拉取:
git submodule init
git submodule update

这两个命令也可以合并为一个:

git submodule update --init

如果子模块又嵌套了子模块,则需要添加--recursive参数

git submodule update --init --recursive

1.7.4 从远程更新子模块

  • 法一:直接在子模块目录下拉取
git pull
  • 法二:项目根目录下执行:
git submodule update --remote <name of the submodule which you want to update>

若不给出需要更新的子模块名字,则默认更新所有子模块。

拉取之后,记得提交主项目的更改。

1.7.5 删除子模块

先注销并清楚缓存:

git submodule deinit -f <submodule's name>
git rm --cached <submodule's name>

然后检查子模块目录和.git/module中的子模块条目是否删除:

rm -rf .git/modules/<submodule's name>
rm -rf <path/to/submodule>

再检查配置文件中的子模块条目是否删除

gedit .gitmodules
gedit .git/config

最后提交即可,示例如下:

git commit -m "Remove submodule"

2.远程控制

2.1 获取本设备的ssh密钥

ssh-keygen -t rsa -C "email@*.com"
  • 密钥在Linux系统中保存于/usr/local/home/.ssh

2.2 与远程库建立或删除连接git remote

2.2.1 建立连接

git romote add <name of the remote repository> <SSH offered by the website>

2.2.2 删除连接

git remote rm <name of the remote repository>

2.3 绑定此分支到远程库的某一分支

git branch --set-upstream-to <name of local branch> <name of the remote repository >/<name of remote branch>

2.4 提交到远程库的某一分支git push

git push <name of the remote repository> <name of local branch>
  • 如果远程库没有对应名字的分支,那么会在远程库自动创建一个同名分支
  • 如果不给定<name of local branch>参数,那么会按照git branch --set-upstream-to绑定的关系进行推送。如果未绑定,则推送失败

2.5 标签管理git tag

2.5.1 打标签

git tag <name of tag> <version>
git tag -a <name of tag> -m "附加信息" <version> #带说明信息的标签

2.5.2 删除标签

git tag -d <name of tag>

2.5.3 查看某一标签

git show <name of tag>

2.5.4 查看所有标签

git tag

2.5.5 推送标签到远程库

git push <name of the remote repository> <name of tag>
git push <name of the remote repository> --tags #一次性推送所有标签

2.5.6 删除远程标签

git push <name of the remote repository>:refs/tags/<name of tag>

2.6 克隆git clone

2.6.1 克隆默认分支

git clone <URL>

2.6.2 克隆指定分支

git clone -b <name of remote branch> <URL>

3.多人协作

3.1 版本落后于远程库而推送失败

  1. 先用git branch --set-upstream-to 绑定到指定远程分支
git branch --set-upstream-to <name of local branch> <name of the remote repository >/<name of remote branch>
  1. 用git pull指令:抓取所绑定分支的最新版本并尝试merge。若出现冲突要手动解决
git pull <name of remote repository> <name of remote branch>:<name of local branch>
  1. 最后提交并推送即可
git commit -m "附加信息"
git push <name of the remote repository>

3.2 老版本bug修复流程

  1. 保存此分支的工作现场
git stash
  1. 切换到有bug的分支,从这个有bug的分支创建一个新分支修复bug,然后合并,保存好合并时给出的版本号
  2. 用这个版本号,对所有存在这个bug的分支做一次相同的提交
git cherry-pick <version>
  1. 回到工作现场,查看贮藏列表并恢复
git stash list #列出贮藏列表
git stash apply stash@{n} #根据序号n恢复到指定工作现场
git stash drop stash@{n}#根据序号n删除指定工作现场

本文由博客一文多发平台 OpenWrite 发布!

标签:教程,git,删除,掌握,--,模块,远程,分支
From: https://www.cnblogs.com/UnderTurrets/p/18391216

相关文章

  • tortoise小乌龟git管理工具的使用(以若伊为例)
    ■后端代码在本地修改后,必须先提交才能推送;对于多人开发的软件,后端的新增模块或功能因为是新的,和别人的没有冲突,都可以提交,但涉及到全局配置的yml文件,因为本地配置(比如数据库配置)和服务器配置可能不同,因此不能提交,不打勾即可。■提交后,通知其他人拉取最新的代码,否则2个人......
  • Python 数据结构——二叉树(最最最最最实用的二叉树教程)
    本文章以实用为主,所以不多废话直接开整本文所介绍的二叉树是最基础的二叉树,不是二叉搜索树,也不是平衡二叉树,就基本的二叉树二叉树的创建基本二叉树的创建其实比链表还要简单,只需创建一个节点的类即可,随后用指针将其串起来。不同于链表的是,二叉树为一个父节点连接到两个子节......
  • llamafile本地安装配置并部署及远程测试大语言模型详细实战教程
    ......
  • Luma AI,让你的视频像电影一样精彩!附带使用教程
    Luma视频生成API对接说明随着AI的应用变广,各类AI程序已逐渐普及。AI已逐渐深入到人们的工作生活方方面面。而AI涉及的行业也越来越多,从最初的写作,到医疗教育,再到现在的视频。Luma是一个专业高质量的视频生成平台,用户只需上传素材,即可根据不同风格和效果自动生......
  • C++面向对象编程(OOP)教程
    C++面向对象编程(OOP)教程在C++中,面向对象编程(OOP)是一种编程范式,它基于“对象”的概念来设计软件。OOP强调将数据(属性)和操作这些数据的方法(行为)封装在一起,形成对象。这种封装提高了代码的模块化、可重用性和可维护性。C++通过类(Class)、对象(Object)、继承(Inheritance)、封装(Encapsu......
  • CUDA教程之 10 掌握 CUDA 矩阵乘法:共享内存、Tile 内存合并和 Bank 冲突简介(教程含源
    介绍在使用CUDA进行GPU编程的世界中,优化性能是关键。实现此目标的最强大技术之一是使用共享内存。本博客将引导您完成使用共享内存执行矩阵乘法的CUDA程序,特别关注理解分块内存合并和存储体冲突。在本文结束时,您将牢固掌握共享内存如何显著加快您的计算速度以及如何......
  • Nautilus-NRP入门教程-ChatGPT翻译版
    原文链接快速开始指南这个快速开始指南将:指导你获取与NRP(NautilusResearchPlatform)进行交互所需的工具。配置你的Kubernetes客户端与NRP集群进行通信。显示查询NRP集群以查看正在运行的进程的命令。提供进一步提交作业和学习Kubernetes的资源。请注意容器......
  • 【Java】Record的使用 (简洁教程)
    Java系列文章目录补充内容Windows通过SSH连接Linux第一章Linux基本命令的学习与Linux历史文章目录Java系列文章目录一、前言二、学习内容:三、问题描述四、解决方案:4.1为什么引入Record4.2Record与Class区别4.3使用场景五、总结:5.1场景使用5.2字段的定义......
  • GitHub每日最火火火项目(8.31)
    项目名称:Cinnamon/kotaemon项目介绍:kotaemon是一个基于开源RAG(检索增强生成)的工具,主要用于与文档进行聊天。它允许用户与自己的文档进行交互,提出问题并获取相关的回答。通过利用RAG技术,该工具能够从文档中检索信息,并以自然语言的方式与用户进行对话,帮助用户更好地理解和......
  • GitHub每日最火火火项目(8.29)
    项目名称:goauthentik/authentik项目介绍:authentik是一个提供认证功能的工具,它就像是你在数字世界中的身份验证胶水,能够确保你的系统和应用的安全性。它可能具备强大的功能,能够满足各种复杂的认证需求,为用户提供可靠的身份验证体验。项目地址:https://github.com/goauthe......