Git基本原理讲解、常见命令、Git版本回退、Git抛弃本地分支拉取仓库最新分支、如何将本地文件推送至github、.gitignore文件的使用

        借此机会写篇博客汇总一下自己去公司实习之后遇到的一些常见关于Git的操作。 

Git基本认识

         Git把数据看作是对小型文件系统的一组快照,每次提交更新,或在Git中保存项目状态时,Git主要对当时的全部文件制作一个快照并保存这个快照的索引。同时,为了提高效率,如果文件没有被修改,Git不再重新存储文件,而是只保留一个链接指向之前存储的文件。Git对待文件的方式更像是一个快照流。

        Git项目中三个工作区域的概念:Git仓库(.git directory)、工作目录(Working Directory)及暂存区域(Staging Area)。

 Git工作的主要流程:

  • 在工作目录中修改文件。
  • 暂存文件,将文件的快照放入暂存区域。
  • 提交更新,找到暂存区域的文件,将快照永久性存储到Git仓库目录。

Git常见操作

Git设置用户名、密码

Git设置全局用户名、密码操作:

  1. git config --global user.name [username]
  2. git config --global user.email [email]

设置的时候,需要将上述内容中的[username]和[email]替换成自己的用户名和密码即可。

  设置好之后通过Git保存用户名、邮箱:

  1.  使用命令直接修改config文件即可保存。

    echo "[credential]" >> .git/config
    echo "    helper = store" >> .git/config

  2. 直接修改.git/config文件

    ubuntu@VM-7-212-ubuntu:~/kernel-code/kernel-netfilter-sample-code$ vim .git/config

    ##修改成如下

    [core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
    [remote "origin"]
        url = https://github.com/Miss-you/kernel-netfilter-sample-code.git
        fetch = +refs/heads/*:refs/remotes/origin/*
    [branch "master"]
        remote = origin
        merge = refs/heads/master
    ##主要是后面这两行,如果不想保存,则删除即可
    [credential]
        helper = store

    ##保存

        设置并保存后可以通过Git config --list查看已设配置,显示如下则操作成功。 

GIt提交代码

  • git branch : 查看当前的所有分支,并且确定当前位于哪个分支上。
  • git status:显示工作目录和当前暂存区状态。
  • git checkout 分支名:切换已经存在的分支。
  • git checkout -b 分支名:不存在的分支,创建并切换到新分支。
  • git add .:将当前目录的更改添加到暂存区。
  • git add -A:将工作目录中的所有更改添加到暂存区,无论这些更改是否被git跟踪。
  • git commit -m "test":将暂存区的更改创建一个新的提交(commit)保存到本地仓库。
  • git push origin 分支名(mastr/ test_01):将本地仓库中的分支推送到远程Git仓库中。
  • git push -u origin 分支名:-u的作用是设置上游(远程分支)跟踪当前的本地分支。第一次推送一个新分支时,使用-u选项可以指定远程分支作为本地分支的上游分支。
  • git push -f origin 分支名:强制将分支分支推送到远程。如果当前分支所在的版本号commit ID不是最新提交的版本号,会抛弃此版本之后的提交记录。
  • git pull origin master:拉取远程分支最新代码到本地。

Git合并分支

        企业开发中上线前都需要拉取最新master分支,并将其合并到对应的上线分支。

  1. 切换到master分支【git checkout master】
  2. 拉取远程分支的最新分支【git pull origin master】
  3. 切换到对应的上线分支,如:feat/print_0523【git chekout feat/print_0523】
  4. 将master分支合并到当前分支【git merge master】此命令会将当前master分支代码合并到当前所在分支。
  5. 解决合并分支冲突。
  6. 推送合并后的分支到远端。

Git进行版本回退

        恢复到一个旧版本、并且旧版本后的代码都抛弃:

        回退原理:git reset --hard 命令会将HEAD指针、当前分支指针和索引区都移动到指定的commit ID,从而重置工作区为该版本。

  1. 查看版本号:【git log】查找历史提交版本号。找到需要回滚的目标版本号。
  2. 使用【git reset --hard 版本号】将版本回退。此命令会将HEAD指针、当前分支指针和索引区都指向指定的commit ID,并重置工作区为该版本。
  3. 推送修改【git push -f 】,此时不能使用 git push 推送,因为我们本地库HEAD指向的版本比远程库的要旧。使用git push -f 强制推送上去。

Git抛弃本地分支拉取仓库对应分支的最新代码

        Git什么需要需要抛弃本地分支,拉取远程最新分支,当误操作将本地某个分支更改之后,并且更改的部分涉及面比较大。此时需要舍弃本地仓库中对应分支,直接拉取远程最新分支。

  • 使用 git branch 检查当前是否处于目标分支。
  • 如果处于目标分支,直接执行后续操作,如果没有处于目标分支,使用git checkout 分支名 切换到对应目标分支。
  • git status :检查本地是否有未提交的代码。
  • git stash:如果有未提交的代码,使用此命令将其暂存起来。git commit 也可以。
  • git fetch origin master:获取最新的远程master分支代码。
  • git reset --hard origin/master:重置本地分支到远程master分支的状态。
  • 如果前面的步骤中执行了git stash将本地未提交的分支暂存,此时需要使用git stash apply将更改应用到master分支。 

如何将本地已有代码推送至git仓库

        在电脑已经安装了git工具的前提下,按照下面步骤执行。

  1. 在github建立仓库,赋值仓库地址:GitHub - Wwt15537588047/learn_netty
  2. 在本地建立项目文件,并写入README.md文件:echo "Learn_netty" >> README.md
  3. 初始化本地仓库:git init
  4. 将当前分支代码添加暂存区中:git add .
  5. 将暂存区中的内容新建一个commit 保存到本地仓库:git commit -m "feat : first code"
  6. 通过IDEA添加远程仓库地址: git remote add origin  “步骤一仓库地址”
  7. 推送代码到远程仓库:git push -u origin master

.gitignore文件的使用

        .gitignore用于忽略某些文件,从而使得其不被提交到远程仓库:

        如果在提交代码的时候使用了git add -A此时被.gitignore跟踪的代码会失效。想要.gitignore生效,一般需要配合git add . 命令使用。

        如果已经使用了git add -A此时如何处理:

git rm -r --cached .  #清除缓存
git add . #重新trace file
git commit -m "update .gitignore" #提交和注释
git push origin master #可选,如果需要同步到remote上的话

参考资料 

如何将本地代码推送至github_github推送代码-CSDN博客

git更新.gitignore并使其生效_gitignore修改后怎么生效-CSDN博客 

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

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

相关文章

【ROS 最简单教程 002/300】ROS 环境安装 (虚拟机版): Noetic

💗 有遇到安装问题可以留言呀 ~ 当时踩了挺多坑,能帮忙解决的我会尽力 ! 1. 安装操作系统环境 Linux ❄️ VM / VirtualBox Ubuntu20.04 👉 保姆级图文安装教程指路,有经验的话 可以用如下资源自行安装 ITEMREFERENCE…

vue3实战(通用后台管理系统)问题总结

npm install less vue-router element-plus -s elementplus 路由引入组件第二种写法: 使用动态的import( )语法(推荐使用)(路由懒加载) component:()>import(路径)component:()>import(/views/Main.vue)打包之后的文件将会异常的大&a…

PLSQL 无法使用normal模式登录ORACLE

1、确认用户具有连接数据库的权限。可以通过查询DBA_SYS_PRIVS来确认用户是否具有CREATE SESSION权限。 SELECT * FROM DBA_SYS_PRIVS WHERE PRIVILEGE CREATE SESSION AND GRANTEE 用户名; 2、需要DBA授予相应的权限:GRANT CREATE SESSION TO 用户名; 3、测试…

《昇思25天学习打卡营第25天|第28天》

今天是打卡的第二十八天,实践应用篇中的计算机视觉中Vision Transformer图像分类。 从Vision Transformer(ViT)简介开始了解,模型结构,模型特点,实验的环境准备和数据读取,模型解析&#xff08…

容器对比虚拟机有哪些不足?

引言 在当今的云计算和微服务架构中,容器技术已成为不可或缺的一部分。它以其轻量级、高效和快速部署的特性,赢得了广大开发者和运维人员的青睐。然而,正如任何技术都有其两面性,容器技术也不例外。本文将对容器技术在安全性、隔离…

深入探索PHP框架:Symfony框架全面解析

1. 引言 在现代Web开发领域,PHP作为一种广泛使用的服务器端脚本语言,其框架的选择对于项目的成功至关重要。PHP框架不仅能够提高开发效率,还能确保代码的质量和可维护性。本文将深入探讨Symfony框架,这是一个功能强大且灵活的PHP…

Teamcenter RAC开发,创建Item的两种方式

1、如果描述不必填,采用胖客户端的创建方式 newItem itemType.create(newItemId, "", targetTypeComp.getTypeName(), item_name, // "test1", null, null2、如果描述必填,则需要采用SOA的创…

用PyPDF2库对pdf文件进行操作

目录 基本原理与基础语句PdfReader类PdfWriter类文件写入 对pdf文件进行插入操作对pdf文件进行删除页操作对pdf文件进行分割操作 基本原理与基础语句 PdfReader类 pdf_file PyPDF2.PdfReader(filenmae) 通过PdfReader函数可以读取pdf文件并生成一个PdfReader类 该类具有以下…

C++11中的右值引用以及移动构造等

目录 一、右值引用 1.左值引用和右值引用 2.左值引用与右值引用比较 3.右值引用使用场景和意义 1️⃣ 传返回值 2️⃣ STL中的应用 4.完美转发 模板中的&& 万能引用(引用折叠) 二、 新的类功能 1.默认成员函数 2.类成员变量初始化 3.…

线程池学习(一)

1.线程池有什么作用 降低资源消耗:通过池化技术重复利⽤已创建的线程,降低线程创建和销毁造成的损耗。 提⾼响应速度:任务到达时,⽆需等待线程创建即可⽴即执⾏。 提⾼线程的可管理性:线程是稀缺资源,如果…

ProxmoxPVE虚拟化平台--安装PVE虚拟机

Proxmox 虚拟机 Proxmox是一个基于Debian Linux和KVM的虚拟化平台,‌它提供了虚拟化的环境,‌允许用户在同一台物理机上运行多个虚拟机。‌Proxmox虚拟环境(‌PVE)‌是一个开源项目,‌由Proxmox Server Solutions Gmb…

【复读EffectiveC++23】条款23:宁以 non-member、non-friend替换member函数

条款23:宁以 non-member、non-friend替换member函数 这是C设计的一个基本原则,主要目的是减少面向对象设计中的耦合,提高软件的内聚性和可复用性。non-member、non-friend函数可以不受类内部实现的影响,因此更加灵活和可复用。 …

Power Tower

Problem - D - Codeforces 牛客和codeforce都有 递归处理l,r,终点是lr && mod1 用扩展欧拉定理 // Problem: D. Power Tower // Contest: Codeforces - Codeforces Round 454 (Div. 1, based on Technocup 2018 Elimination Round 4) // URL: https://c…

学习HTML、CSS和JavaScript的完整路线指南

第一步&#xff1a;理解基础概念 HTML基础 HTML简介和结构 什么是HTML&#xff1f;它在Web开发中的角色。HTML文档的基本结构&#xff1a;<!DOCTYPE>, <html>, <head>, <body>等标签的作用和使用方法。 常用HTML元素 文本相关&#xff1a;段落 <p&g…

【Socket 编程】应用层自定义协议与序列化

文章目录 再谈协议序列化和反序列化理解 read、write、recv、send 和 tcp 为什么支持全双工自定义协议网络计算器序列化和反序列化 再谈协议 协议就是约定&#xff0c;协议的内容就是约定好的某种结构化数据。比如&#xff0c;我们要实现一个网络版的计算器&#xff0c;客户端…

【logstash】logstash使用多个子配置文件

这里有个误区在pipelines.yml中写conf.d/*&#xff0c;实测会有问题&#xff0c;不同的filter处理逻辑会复用。 现在有两个从kafka采集日志的配置文件&#xff1a;from_kafka1.conf&#xff0c;from_kafka2.conf 修改pipelines.yml配置文件 config/pipelines.yml- pipeline.i…

关于P2P(点对点)

P2P 是一种客户端与客户端之间&#xff0c;点对点连接的技术&#xff0c;在早前的客户端都是公网IP&#xff0c;没有NAT的情况下&#xff0c;P2P是较为容易实现的。 但现在的P2P&#xff0c;实现上面会略微有一些复杂&#xff1a;需要采取UDP打洞的技术&#xff0c;但UDP打出来…

asp.net mvc 三层架构开发商城系统需要前台页面代完善

一般会后端开发&#xff0c;都不太想写前台界面&#xff0c;这套系统做完本来想开源&#xff0c;需要前台界面&#xff0c;后台已开发&#xff0c;有需求的朋友&#xff0c;可以开发个前端界面完善一下&#xff0c;有的话可以私聊发给我啊

python_使用多进程来处理数据写入Excel文件_multiprocessing.Process

python_使用多进程来处理数据写入Excel文件 优势&#xff1a;与多线程相比&#xff0c;多进程写入速度要更快&#xff0c;12万多行数据处理用时3.52秒&#xff0c;比多进程快了1秒左右。 import pandas as pd from io import BytesIO import multiprocessing import time impor…

Spring源码-AOP

1、spring aop和aspectJ什么关系&#xff1f; aop是编程思想&#xff0c;spring aop被aspectJ都是aop思想的具体实现。spring aop为了不重复造轮子&#xff0c;通过一定的取舍选取了aspectJ中适合自己的注解。spring初期版本的aop只支持通过实现aop接口的方式来实现切面增强&a…