Git重修系列 ------ Git的使用和常用命令总结

news2024/11/18 13:16:27

一、Git的安装和配置

git安装:

Git - Downloads

git首次配置用户信息:

$ git config --global user.name "kequan"
$ git config --global user.email kequanchan@qq.com
$ git config --global credential store 配置 Git 以使用本地存储机制来缓存您的凭据(如用户名和密码),以便在与远程 Git 仓库交互时(如执行 git pull, git push 等操作)免去频繁手动输入这些凭据的步骤。

git 初始化仓库 和克隆

$ cd 目标目录
$ git init <project-name>  创建一个新的本地仓库(省略 project-name则在当前目录创建。)

$ git clone <url>     克隆一个远程仓库。

二、Git的工作流程

git操作流程图:

2.1、基础知识

四个区域:

  • **工作区(Working Directory):**电脑里能实际看到的目录。
  • **暂存区(Stage/Index):**暂存区也叫索引,用来临时存放未提交的内容,一般在.git目录下的 index中。
  • **本地仓库(Repository):**Git在本地的版本库, 仓库信息存储在.git这个隐藏目录中。
  • **远程仓库(Remote Repository):**托管在远程服务器上的仓库。 常用的有 GitHub、 GitLab、 Gitee。

为了更容易理解,可以先忽略 远程仓库,上图左侧操作基本在本地的一些操作。

文件状态:

  • 未被添加 : 从项目外部拉入的文件处于当前状态,在pycharm中通常为红色
  • 未被修改:此状态的文件通常以存放在本地仓库中,并已进行版本控制的文件。
  • 已修改: 将仓库中已存在的文件修改了,但没有就行更新和做版本控制,也没有保存到暂存区。
  • 已暂存:修改后已保存到暂存区的文件,或者新 添加的文件。

分支概念

  • main:默认主分支
  • origin:默认远程仓库
  • HEAD:指向当前分支的指針
  • HEAD^:上一个版本
  • HEAD~4:上4个版

特殊的文件:

  • git:Git仓库的元数据和对象数据库
  • gitignore:忽略文件,不需要提交到仓库的文件
  • gitattributes:指定文件的属性,比如换行符
  • gitkeep:使空目录被提交到仓库
  • gitmodules:记录子模块的信息
  • gitconfig:记录仓库的配置信

2.2、基础操作

添加和提交

git add <file> 添加一个文件到暂存区,比如git add . 就表示添加所有文件到暂存区

git commit -m "message” 提交所有暂存区的文件到本地仓库

git commit -am "message” 提交所有已修改的文件到本地仓库

查看修改记录

git log 查看记录

git log --oneline 查看提交历史, --oneline表示简介模式。

git status 查看仓库状态, 列出还未提交的新的或修改的文件。

git diff **查看unstaged状态的文件 ,**查看这次还没 add (unstaged) 的修改部分 和上个已经 commit 的文件有何不同

git diff --cached 查看 staged文件,已经 add 了这次修改, 文件变成了 可提交状态 (staged)

git diff HEAD 查看 add 过 (staged) 和 没 add (unstaged) 的修改

git diff <commit-id> <commit-id> 查看两个提交之间的差异。

回到以前分支

git reset --hard 【HEAD or 位置ID】 使用reset回到某个节点

git checkout 位置ID -- 文件名 将 某文件 回到 位置ID 的节点

分支操作

git branch 查看所有本地分支, 当前分支前面会有一个星号*-r查看远程分支, -a查看所有分支。

git branch <branch-name> 创建一个新的分支。

git checkout -b <branch-name> 切换到指定分支, 并更新工作区。

git branch -d <branch-name> 删除一个已经合并的分支。

git checkout -D <branch-name> 删除一个分支, 不管是否合并。

git tag <tag-name> 给当前的提交打上标签, 通常用于版本发布。

git log --oneline --graph 使用命令查看分支情况

git merge --no-ff -m message <branch-name> 合并分支, --no-ff参数表示禁用 Fast Forward模式, 合并后的历史有分支, 能看出曾经做过合并,

git merge --tt -m "message ‹branch-name> 而-ff参数表示使用 FastForward模式, 合并后的历史会变成一条直线。

合井&squash所有提交到一个提交 git merge -squash <branch-name>

rebase不会产生新的提交,而是把当前分支的每一个提交都 “复制“到目标分支上,然后再把当前分支指向目标分支,而merge会产生一个新的提交,这个提交有两个分支的所有修改。

Rebase

Rebase操作可以把本地末push的分又提交历史整理成直线,看起来更直观。但是,如果多人协作时,不要对已经推送到远程的分支执行Rebase操作(不要在和别人协同开发时使用rebase操作,通常在自己的多个分支时使用rebase操作)

git checkout <dev>

git rebase ‹main> --continue

图示rebase过程:可以清楚看到,rebase将 两条分支合并成一条,没有创建新的节点C5,而是将A分支C3节点补充道B分支。

撤销和操作文件

git mv <file> <new-file> 移动一个文件到新的位置。

git rm <file> 从工作区和暂存区删除一个文件, 并且将这次删除放入暂存区。

git rm --cached <file> 从索引 /暂存区中删除文件, 但是本地工作区文件还在, 只是不希望这个文件被版本控制。

git checkout <file> <commit-id> 恢复一个文件到之前的版本。

git revert <commit-id> 创建一个新的提交,用来撤销指定的提交, 原来的所有变化将被前者抵消, 并且应用到当前分支。

git reset --mixed <commit-id> 重置当前分支的 HEAD为之前的某个提交, 并且删除所有之后的提交。 --hard参数表示重置工作区和暂存区, --soft参数表示重置暂存区, --mixed参数表示重置工作区。

git restore --staged <file> 撤销暂存区的文件, 重新放回工作区(git add的反向操作)。

暂存修改

git stash save "message” Stash操作可以把当前工作现场 “储藏” 起来, 等以后恢复现场后继续工作。

-u 参数表示把所有未跟踪的文件也一并存储; -a 参数表示把所有未跟踪的文件和忽略的文件也一并存储; save参数表示存储的信息, 可以不写。

git stash list 查看所有 stash。

git stash pop 恢复最近一次 stash。

git stash pop stash@{2} 恢复指定的 stash, stash@{2}表示第三个 stash, stash@{0}表示最近的 stash。

git stash apply 重新接受最近一次 stash。

git stash drop stash@{2} pop和 apply的区别是, pop会把 stash内容删除,而 apply不会。 可以使用 git stash drop 来删除 stash。

git stash clear 删除所有 stash。

远程仓库操作

git remote add <remote-name> <remote-url> 添加远程仓库。

git remote -v 查看远程仓库。

git remote rm <remote-name> 删除远程仓库。

git remote rename <old-name> <new-name> 重命名远程仓库。

git pull <remote-name> <branch-name> 从远程仓库拉取代码。 默认拉取远程仓库名 origin的 master或者 main分支。

git pull --rebase 将本地改动的代码 rebase到远程仓库的最新代码上(为了有一个干净、 线性的提交历 史)。

git push <remote-name> <branch-name> 推送代码到远程仓库(然后再发起 pull request)。

git fetch <remote-name> 获取所有远程分支。

git branch -r 查看远程分支。

git fetch <remote-name> <branch-name> Fetch某一个特定的远程分支。

GitFlow

GitFlow 是一种流程模型,用于在Git上管理软件开发项目。

主分支(**master/main**):代表了项目的稳定版本,每个提交到主分支的代码都应该是经过测试和审核的。

开发分支(**develop):用于日常开发。所有的功能分支、发布分支和修补分支都应该从开发分支派生出来。**

功能分支(**feature**):用于开发单独的功能或者特性。每个功能分支都应该从开发分支派生,并在开发完成后合并回开发分支。

发布分支(**release):用于准备项目发布。发布分支应该从开发分支派生,并在准备好发布版本后合并回主分支和开发分支。**

热修复分支(**hotfix**):用于修复主分支上的紧急问题。热修复分支应该从主分支派生,并在修复完成后,合并回主分支和开发分支。

2.3、场景案例

1、已经提交了 commit 却发现在这个 commit 中忘了附上另一个文件。

最后一个 commit 是 change 2, 我们将要添加另外一个文件, 将这个修改也 commit 进 change 2.

$ git add 2.py
$ git commit --amend --no-edit   # "--no-edit": 不编辑, 直接合并到上一个 commit
$ git log --oneline    # "--oneline": 每个 commit 内容显示在一行

2、有时我们添加 add 了修改, 但是又后悔, 并想补充一些内容再 add

$ git add 1.py
$ git status -s # "-s": status 的缩写模式
# 输出
M  1.py     # staged
-----------------------
$ git reset 1.py
# 输出
Unstaged changes after reset:
M   1.py
-----------------------
$ git status -s
# 输出
 M 1.py     # unstaged

3、随意切换某一个节点

使用reset 回退到指定节点:

# 不管我们之前有没有做了一些 add 工作, 这一步让我们回到 上一次的 commit
$ git reset --hard HEAD    
# 输出
HEAD is now at 904e1ba change 2
-----------------------
# 看看所有的log
$ git log --oneline
# 输出
904e1ba change 2
c6762a1 change 1
13be9a7 create 1.py
-----------------------
# 回到 c6762a1 change 1
# 方式1: "HEAD^"
$ git reset --hard HEAD^  

# 方式2: "commit id"
$ git reset --hard c6762a1
-----------------------
# 看看现在的 log
$ git log --oneline
# 输出
c6762a1 change 1
13be9a7 create 1.py

可以看到 change2 ,使用reflog查看最近的改动,并挽救之前的

$ git reflog
# 输出
c6762a1 HEAD@{0}: reset: moving to c6762a1
904e1ba HEAD@{1}: commit (amend): change 2
0107760 HEAD@{2}: commit: change 2
c6762a1 HEAD@{3}: commit: change 1
13be9a7 HEAD@{4}: commit (initial): create 1.py

重复 reset 步骤就能回到 commit (amend): change 2 (id=904e1ba)这一步了:

$ git reset --hard 904e1ba
$ git log --oneline
# 输出
904e1ba change 2
c6762a1 change 1
13be9a7 create 1.py

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

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

相关文章

基于自注意力机制的长短期记忆神经网络(LSTM-SelfAttention)的回归预测

提示&#xff1a;MATLAB版本需要R2023a以上 基于自注意力机制的长短期记忆神经网络&#xff08;LSTM-SelfAttention&#xff09;是一种用于时序数据预测的模型。这个模型结合了两个不同的结构&#xff0c;即长短期记忆网络&#xff08;LSTM&#xff09;和自注意力机制&#xff…

解决HttpServletRequest中的InputStream/getReader只能被读取一次的问题

一、事由 由于我们业务接口需要做签名校验&#xff0c;但因为是老系统了签名规则被放在了Body里而不是Header里面&#xff0c;但是我们不能在每个Controller层都手动去做签名校验&#xff0c;这样不是优雅的做法&#xff0c;然后我就写了一个AOP&#xff0c;在AOP中实现签名校…

Cesium.js(1):Cesium.js简介

1 前言 现有的gis开发方向较流行的是webgis开发&#xff0c;其中Cesium是一款开源的WebGIS库&#xff0c;主要用于实时地球和空间数据的可视化和分析。它提供了丰富的地图显示和数据可视化功能&#xff0c;并能实现三维可视化开发。Cesium适用于地球科学研究、军事情报分析、航…

Java编程练习之final关键字

1.final类&#xff1a;不允许任何类继承&#xff0c;并且不允许其他人对这个类进行任何改动&#xff1b; 当被某个类设置为final类时&#xff0c;类中的所有方法都被隐式的设置为final形式&#xff0c;但是final类中的成员变量既可以被定义为final形式&#xff0c;又可以被定义…

【区块链】椭圆曲线数字签名算法(ECDSA)

本文主要参考&#xff1a; 一文读懂ECDSA算法如何保护数据 椭圆曲线数字签名算法 1. ECDSA算法简介 ECDSA 是 Elliptic Curve Digital Signature Algorithm 的简称&#xff0c;主要用于对数据&#xff08;比如一个文件&#xff09;创建数字签名&#xff0c;以便于你在不破坏它…

Maven的仓库、周期和插件

优质博文&#xff1a;IT-BLOG-CN 一、简介 随着各公司的Java项目入库方式由老的Ant改为Maven后&#xff0c;相信大家对Maven已经有了个基本的熟悉。但是在实际的使用、入库过程中&#xff0c;笔者发现挺多人对Maven的一些基本知识还缺乏了解&#xff0c;因此在此处跟大家简单地…

SpringCloud系列(19)--将服务消费者Consumer注册进Consul

前言&#xff1a;在上一章节中我们把服务提供者Provider注册进了Consul&#xff0c;而本章节则是关于如何将服务消费者Consumer注册进Consul 1、再次创建一个服务提供者模块&#xff0c;命名为consumerconsul-order80 (1)在父工程下新建模块 (2)选择模块的项目类型为Maven并选…

使用CubeMx配置GD32F303系列单片机进行DMA ADC

原理图查看 查原理图可以看到GD32F103C8T6的官方开发板GD32303C-START-V1.0的PA1没有接任何东西 使用PA1作为ADC端口 CubeMX配置ADC和时钟 配置ADC通道 启用循环模式 配置此通道ADC分频 配置ADC DMA为循环模式 配置时钟 生成项目 Keil里面的配置 选择对应的GD32型号 编译…

2024全新瀚海跑道:矢量图片迅速养号游戏玩法,每天一小时,日转现200

最初我注意到这种玩法&#xff0c;是因为最近在浏览各大平台的视频时&#xff0c;我发现了一种特殊类型的账号&#xff0c;其养号成功率高达90%。这些账号发布的视频内容和数据非常夸张&#xff0c;而且制作起来非常简单&#xff0c;任何人都可以轻松上手。这些账号主要发布矢量…

堆与优先队列——练习题

1. 数据流中的第 K 大元素 代码实现&#xff1a; 思路&#xff1a;创建一个大小为 k 的小顶堆&#xff0c;堆顶元素就是第 K 大元素 typedef struct {int *__data, *data;int size;int n; } KthLargest;#define swap(a, b) { \__typeof(a) __c (a); \(a) (b); \(b) __c; \ }…

C++ 笔试练习笔记【1】:字符串中找出连续最长的数字串 OR59

文章目录 OR59 字符串中找出连续最长的数字串题目思路分析实现代码 注&#xff1a;本次练习题目出自牛客网 OR59 字符串中找出连续最长的数字串 题目思路分析 首先想到的是用双指针模拟&#xff0c;进行检索比较输出 以示例1为例&#xff1a; 1.首先i遍历str直到遍历到数字&a…

字符串类型漏洞之updatexml函数盲注

UPDATEXML 是 MySQL 数据库中的一个函数&#xff0c;它用于对 XML 文档数据进行修改和查询。然而&#xff0c;当它被不当地使用或与恶意输入结合时&#xff0c;它可能成为 SQL 注入攻击的一部分&#xff0c;从而暴露敏感信息或导致其他安全漏洞。 在 SQL 注入攻击中&#xff0…

CentOS 9 (stream) 安装 nginx

1.我们直接使用安装命令 dnf install nginx 2.安装完成后启动nginx服务 # 启动 systemctl start nginx # 设置开机自启动 systemctl enable nginx# 重启 systemctl restart nginx# 查看状态 systemctl status nginx# 停止服务 systemctl stop nginx 3.查看版本确认安装成功…

Pytorch实现线性回归模型

在机器学习和深度学习的世界中&#xff0c;线性回归模型是一种基础且广泛使用的算法&#xff0c;简单易于理解&#xff0c;但功能强大&#xff0c;可以作为更复杂模型的基础。使用PyTorch实现线性回归模型不仅可以帮助初学者理解模型的基本概念&#xff0c;还可以为进一步探索更…

深信服超融合虚拟机备份报错显示准备备分镜像失败

问题&#xff1a;最近一段时间深信服超融合虚拟机在执行备份策略时总是报错&#xff0c;备份空间又还很富余。 解决办法&#xff1a; 1 删除备份失败虚拟机的所有备份 2 解绑该虚拟机的备份策略 可靠服务>>备份与CDP>> 找到备份策略>>点【编辑】>>…

刷机维修进阶教程---开机定屏 红字感叹号报错 写字库保资料 救砖 刷官方包保资料的步骤方法解析

在维修各种机型 中经常会遇到开机定屏 进不去系统,正常使用无故定屏进不去系统或者更新降级开机红色感叹号的一些故障机。但顾客需要报资料救砖的要求,遇到这种情况。我们首先要确定故障机型的缘由。是摔 还是更新降级 还是无故使用重启定屏等等。根据原因来对症解决。 通过…

springboot3整合redis

redis在我们的日常开发中是必不可少的&#xff0c;本次来介绍使用spring boot整合redis实现一些基本的操作&#xff1b; 1、新建一个spring boot项目&#xff0c;并导入相应的依赖&#xff1b; <dependency><groupId>org.springframework.boot</groupId><…

基于YOLOV8+Pyqt5无人机航拍太阳能电池板检测系统

1.YOLOv8的基本原理 YOLOv8是一种前沿的目标检测技术&#xff0c;它基于先前YOLO版本在目标检测任务上的成功&#xff0c;进一步提升了性能和灵活性&#xff0c;在精度和速度方面都具有尖端性能。在之前YOLO 版本的基础上&#xff0c;YOLOv8 引入了新的功能和优化&#xff0c;…

PDF 正确指定页码挂载书签后,书签页码对不上

这个问题与我的另一篇中方法一样 如何让一个大几千页的打开巨慢的 PDF 秒开-CSDN博客 https://blog.csdn.net/u013669912/article/details/138166922 另做一篇原因是一篇文章附带一个与该文章主题不相关的问题时&#xff0c;不利于被遇到该问题的人快速搜索发现以解决其遇到的…

C++笔试强训day9

目录 1.添加逗号 2.跳台阶 3.扑克牌顺子 day9的题目都比较简单&#xff0c;就不赘述了 1.添加逗号 链接 我的思路很清晰也很简单易懂&#xff1a; 把输入数据存入字符串string s&#xff0c;定义一个string ret&#xff0c;然后逆置string s&#xff0c;将s中的数一个一个…