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

一、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.mzph.cn/diannao/4316.shtml

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

相关文章

mysql主库delete一个没主键的表导致从库延迟很久问题处理

一 问题描述 发现线上环境一个从库出现延迟&#xff0c;延迟了2天了&#xff0c;还没追上主库。 查看当前运行的sql及事务&#xff0c;发现这个sql语句是在delete一个没主键的表。 二 问题模拟 这里在测试环境复现下这个问题。 2.1 在主库造数据 use baidd; CREATE TABL…

【数据库】Redis

文章目录 [toc]Redis终端操作进入Redis终端Redis服务测试切换仓库 String命令存储字符串普通存储设置存储过期时间批量存储 查询字符串查询单条批量查询 Key命令查询key查询所有根据key首字母查询判断key是否存在查询指定的key对应的value的类型 删除键值对 Hash命令存储hash查…

软件测试_v模型_w模型

v模型&#xff1a; w模型&#xff1a; 一、V模型的8个阶段及其对应关系如下&#xff1a; 1. 需求分析&#xff1a;明确项目的需求&#xff0c;为后续设计提供依据。 2. 总体设计&#xff1a;根据需求分析&#xff0c;设计系统的总体架构。 3. 详细设计&#xff1a;在总体设计的…

在no branch上commit后,再切换到其他分支,找不到no branch分支的修改怎么办?

解决办法 通过git reflog我们可以查看历史提交记录&#xff0c;这里的第二条提交&#xff08;fbd3ea8&#xff09;就是我在no branch上的提交。 再通过git checkout -b backup fbd3ea8&#xff0c;恢复到上次提交的状态&#xff0c;并且为其创建个分支backup&#xff0c;此时…

(七)Servlet教程——Idea编辑器集成Tomcat

1. 点击桌面上Idea快捷方式打开Idea编辑器&#xff0c;假如没有创建项目的话打开Idea编辑器后的界面展示如下图所示 2. 点击界面左侧菜单中的自定义 3. 然后点击界面中的“所有设置...”,然后点击“构建、执行、部署”&#xff0c;选择其中的“应用程序服务器” 4. 点击“”按钮…

C语言-动态内存分配

即使行动导致错误&#xff0c;却也带来了学习与成长;不行动则是停滞与萎缩。&#x1f493;&#x1f493;&#x1f493; •&#x1f319;知识回顾 亲爱的友友们大家好&#xff01;&#x1f496;&#x1f496;&#x1f496;&#xff0c;我们紧接着要进入一个新的内容&#xff0c;…

k8s RBAC 角色访问控制详解与生产中的实际应用案例

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Kubernetes航线图&#xff1a;从船长到K8s掌舵者》 &#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、前言 1、k8s简介 2、RBAC简介 二、RBAC关键…

【JavaParser笔记04】如何使用JavaParser依赖库生成Java类、接口、方法、属性、注释等内容

这篇文章,主要介绍如何使用JavaParser依赖库生成Java类、接口、方法、属性、注释等内容。 目录 一、JavaParser代码生成 1.1、引入依赖 1.2、生成Java类 1.3、生成属性和setter、

centos学习-网络配置命令-实用技巧

CentOS网络配置命令详解&#xff1a;轻松掌握网络配置技巧 在CentOS服务器的搭建和管理过程中&#xff0c;网络配置是至关重要的一环。良好的网络配置不仅可以确保服务器的稳定运行&#xff0c;还能够保障网络安全和数据传输效率。本文将详细介绍CentOS网络配置命令&#xff0…

【Pytorch报错】RuntimeError: cuDNN error: CUDNN_STATUS_INTERNAL_ERROR

报错信息&#xff1a; File "/root/miniconda3/lib/python3.8/site-packages/torch/nn/modules/conv.py", line 297, in _conv_forwardreturn F.conv1d(input, weight, bias, self.stride, RuntimeError: CUDA error: CUBLAS_STATUS_ALLOC_FAILED when calling cubl…

【AMBA Bus ACE 总线 6 -- ACE cache maintenance 详细介绍】

文章目录 ACE cache maintenance什么叫 cache maintenance operations呢?ACE cache line statesACE cache maintenance 什么叫 cache maintenance operations呢? 比如ARM CPU 对自己的Icache 和 Dcache会有大量的transaction操作,也即maintenance操作,如果cache 是dirty 话…

Python的历史演变与作用

目录 1.概述 2.起源 3.发展阶段 4.Python 3的诞生 5.现状与未来 6.Python的作用 6.1.Web开发 6.2.数据科学与人工智能 ​​​​​​​6.3.自动化与脚本编程 ​​​​​​​6.4.教育与学习 ​​​​​​​6.5.其他领域 7.结语 1.概述 Python&#xff0c;一门富有表…

26.统一网关Gateway

网关的功能 1.身份认证&#xff0c;权限的校验。 2.服务的路由&#xff0c;负载均衡。用户请求被分配到哪一个微服务。一个微服务可以有多个实例&#xff0c;所以使用负载均衡。 3.请求限流。 springcloud网关实现有两种&#xff1a;gateway, zuul zuul是基于servlet实现的…

如何在vue中写 键盘控制方法

仅使用一个方法块来监听键盘事件并在按下 L 键时输出 "L"&#xff0c;您可以直接在组件的 mounted 钩子函数中定义匿名函数来处理键盘事件。这样做可以避免在组件中定义额外的方法&#xff0c;使代码更加简洁。以下是一个简化的示例代码&#xff1a; export default …

JavaEE——介绍 HTTPServlet 三部分使用与 cookie 和 session 的阐述

文章目录 一、HTTPServlet介绍其中的关键 三个方法 二、HTTPServletRequest(处理请求)1.分块介绍方法作用get 为前缀的方法字段中 含有 getParameter 字段 的方法(前后端交互)&#xff1a;字段中 含有 getHeader 字段 的方法&#xff1a; 2.解释前后端的交互过程3.使用 json 格…

面试经验|Arm机器学习和图形算法工程师——技术经理面

文章目录 题记英国面试框架HR简单沟通技术经理面技术面谈Offer 面试记录自我介绍环节项目机器学习/图像处理/图形学算法如何做超分辨率任务&#xff0c;通常使用什么loss函数输入10个连续的低质量视频帧&#xff0c;如何对画面进行去噪请简述计算光流的过程请简述alpha blendin…

Bun 入门到精通(二)——初始化

bun init 使用 bun init 可以搭建一个新项目&#xff0c;类似于 npm init&#xff0c;同样&#xff0c;bun init 也可以接收 -y/--yes 的参数&#xff0c;同样类似于 npm init -y。 bun init工作原理 先创建一些默认文件 包文件&#xff1a;带 name 属性的 package.json语言…

币圈是什么意思?币圈开发

币圈是一个涵盖了区块链、加密货币及其应用的独特领域&#xff0c;它的兴起与发展已经彻底改变了我们对金融、科技和未来的认知。 一、什么是币圈&#xff1f; 币圈可以被理解为围绕虚拟货币展开的一系列活动和产业的总称。它包括区块链技术的研发、数字货币的创造、交易、投资…

数字旅游打造个性化旅行体验,科技让旅行更精彩:借助数字技术,旅行者可以定制专属旅行计划,享受个性化的旅行体验

目录 一、引言 二、数字旅游的兴起与发展 三、数字技术助力个性化旅行体验 1、智能推荐系统&#xff1a;精准匹配旅行者需求 2、定制化旅行计划&#xff1a;满足个性化需求 3、实时互动与分享&#xff1a;增强旅行体验 四、科技提升旅行便捷性与安全性 1、移动支付与电…

K8s初次入门

初步:搭建k8s集群 k8s 集群主机清单 主机名ip地址master1.50node-00011.51node-00021.52node-00031.53node-00041.54node-00051.55harbor1.30事先准备 所有的k8s集群主机卸载防火墙和禁用swap交换空间(docker、k8s建议禁用swap) 安装工具 dnf install -y kubeadm kubelet ku…