git-学习git,这一篇就足够了(初学者视角实战教程)

news2025/1/18 16:54:40

目录

  • git概念
    • 命令
    • git配置
    • README
    • .gitignore
    • 工作区、暂存区和版本库
  • 基础
    • 配置
    • 创建远程仓库
    • 克隆
    • 修改
    • 查看工作区当前状态
    • 添加到暂存区
    • 回退版本
    • 比较工作区与缓存区的差异
    • 添加到本地仓库并加注释
    • push
  • 提高
    • git pull
    • 文件删除与恢复
    • 分支管理
      • 列出分支
      • 创建分支
      • 切换分支
      • 分支操作
    • 标签管理
      • 创建标签
      • 查看标签
      • 推送标签到远程
      • 删除标签
    • 日志
    • 冲突与解决
      • 单分支多人合作冲突与解决
      • 分支合并冲突与解决
  • 常见问题
    • .gitignore失效问题
    • 不冲突/单分支冲突/合并冲突的情况有哪些?
  • 参考

git概念

命令

usage: git [--version] [--help] [-C <path>] [-c name=value]
           [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
           [-p | --paginate | --no-pager] [--no-replace-objects] [--bare]
           [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
           <command> [<args>]

These are common Git commands used in various situations:

start a working area (see also: git help tutorial)
   clone      Clone a repository into a new directory
   init       Create an empty Git repository or reinitialize an existing one

work on the current change (see also: git help everyday)
   add        Add file contents to the index
   mv         Move or rename a file, a directory, or a symlink
   reset      Reset current HEAD to the specified state
   rm         Remove files from the working tree and from the index

examine the history and state (see also: git help revisions)
   bisect     Use binary search to find the commit that introduced a bug
   grep       Print lines matching a pattern
   log        Show commit logs
   show       Show various types of objects
   status     Show the working tree status

grow, mark and tweak your common history
   branch     List, create, or delete branches
   checkout   Switch branches or restore working tree files
   commit     Record changes to the repository
   diff       Show changes between commits, commit and working tree, etc
   merge      Join two or more development histories together
   rebase     Reapply commits on top of another base tip
   tag        Create, list, delete or verify a tag object signed with GPG

collaborate (see also: git help workflows)
   fetch      Download objects and refs from another repository
   pull       Fetch from and integrate with another repository or a local branch
   push       Update remote refs along with associated objects

常用命令

  • clone
  • add
  • commit
  • pull
  • push
  • status
  • remote
  • branch
  • diff
  • merge
  • rebase
  • tag

git配置

Git 提供了一个叫做 git config 的工具,专门用来配置或读取相应的工作环境变量。这些环境变量,决定了 Git 在各个环节的具体工作方式和行为。这些变量可以存放在以下三个不同的地方:

  • /etc/gitconfig 文件:系统中对所有用户都普遍适用的配置。若使用 git config 时用 --system 选项,读写的就是这个文件。
  • ~/.gitconfig 文件:用户目录下的配置文件只适用于该用户。若使用 git config 时用 --global 选项,读写的就是这个文件。
  • 当前项目的 Git 目录中的配置文件(也就是工作目录中的 .git/config 文件):这里的配置仅仅针对当前项目有效。每一个级别的配置都会覆盖上层的相同配置,所以 .git/config 里的配置会覆盖 /etc/gitconfig 中的同名变量。
    在 Windows 系统上,Git 会找寻用户主目录下的 .gitconfig 文件。主目录即 $HOME 变量指定的目录,一般都是 C:\Documents and Settings\$USER。

此外,Git 还会尝试找寻 /etc/gitconfig 文件,只不过看当初 Git 装在什么目录,就以此作为根目录来定位。

README

项目的描述文件,例如,包含作者信息,组织信息,安装方法,使用说明等

.gitignore

忽略文件或目录,不上传到远程仓库。

工作区、暂存区和版本库

  • 工作区:就是在电脑里能看到的目录。
  • 暂存区:英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
  • 版本库:工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。
    在这里插入图片描述
    图片来源:https://www.runoob.com/git/git-workspace-index-repo.html

基础

配置

例如,配置用户名和邮箱

git config --global user.name "FrankYu"
git config --global user.email yubo112058@sina.com

在这里插入图片描述

创建远程仓库

这里在gitee创建的远程仓库
在这里插入图片描述

克隆

git clone https://gitee.com/frankyu365/learngit.git

在这里插入图片描述
learngit目录下内容如下
在这里插入图片描述
.git目录中内容如下
在这里插入图片描述

修改

添加src目录
在这里插入图片描述
使用pycharm打开目录,添加源代码,虚拟环境
在这里插入图片描述

查看工作区当前状态

git status

在这里插入图片描述

添加到暂存区

git add .

在这里插入图片描述

回退版本

git reset HEAD

我们发现git add添加.idea下面的文件到缓存区了,我们并不需要
在这里插入图片描述
之后运行

 git add .\src\main.py

比较工作区与缓存区的差异

git diff --cached

在这里插入图片描述
确认我们更改了main.py

添加到本地仓库并加注释

git commit -m 'add main.py'

在这里插入图片描述

push

git push

在这里插入图片描述
查看远程仓库
在这里插入图片描述
可以看到仅添加了main.py,没有.idea目录。如果只是个人使用,项目不复杂,只会前面的操作基本就可以了。如果多人合作,项目比较大,就涉及到版本管理、权限控制、分支管理、冲突解决等问题。

提高

git毕竟是多人合作的,所以还要考虑冲突、权限、分支管理等

git pull

查看status
在这里插入图片描述
现在,修改远程仓库的.gitignore文件,模拟其他合作者修改后push到远程仓库的情况
在这里插入图片描述
之后,我们运行一下命令

git pull

在这里插入图片描述
可以看到拉取了修改,status已经不显示了

文件删除与恢复

我们先创建一个nothing.txt文件
在这里插入图片描述
之后,我们在本地(工作区)删除
在这里插入图片描述
假设我们是不小心删除的,现在工作区没有了,如何找回呢?

git checkout -- nothing.txt

在这里插入图片描述
现在我就是想要删除它,该如何做呢?

git rm nothing.txt
git commit -m 'delete nothing.txt'

在这里插入图片描述
现在还可以从远程仓库找到该文件,我们再运行

git push

就可以删除了

分支管理

列出分支

git branch

在这里插入图片描述
默认是只有master分支的。查看远程仓库的分支,添加-r选项

git branch -r

创建分支

git branch test

在这里插入图片描述
可以看到有两个分支,所在的分支前面有个*

切换分支

git checkout test

在这里插入图片描述

分支操作

在创建分支的情况下,push到远程仓库

git push origin test

在这里插入图片描述
在这里插入图片描述
假设我是测试人员,只修改test分支,那么如何克隆某一个分支呢?

git clone --single-branch --branch test https://gitee.com/frankyu365/learngit.git

在这里插入图片描述
修改main.py,其他操作都是一样的。
在这里插入图片描述
现在本地有两个clone,一个是单分支test,与远程仓库一致,一个是双分支,test分支与远程仓库不一致。

git pull origin test:test

这时你会发现,两个分支的内容不一样,切换分支时,目录下的文件也会改变。

标签管理

标签与commit挂钩,类似一个别名

创建标签

 git tag -a v1.0 -m "version 1.0 released"

-a后加标签 -m后加注释

注意:默认将标签打到最新的commit上,需要在之前的commit上打标签,可以后面加上commit id,commit id获取可以看日志部分,

查看标签

标签列表

git tag

标签信息

git show v1.0

在这里插入图片描述

推送标签到远程

git push origin v1.0

在这里插入图片描述
在这里插入图片描述

删除标签

本地删除

git tag -d v1.0

远程删除

git push origin :refs/tags/v1.0

在这里插入图片描述

日志

git log

在这里插入图片描述

冲突与解决

单分支多人合作冲突与解决

总有朋友学习git的时候认为修改同一个文件会出冲突,其实不是的
远程修改main.py 并提交
在这里插入图片描述
本地修改main.py
在这里插入图片描述
本地 git push
在这里插入图片描述
可以看到被拒绝了,请先fetch,也就是获取(git pull),因为远程仓库有本地没有的修改
之后,我们git pull

在这里插入图片描述
可以看到已经自动merge 了
在这里插入图片描述
看本地文件内容,可以看到git很聪明的将远程和本地的内容合并到了一起,我们再次push
在这里插入图片描述
可以看到成功了,远程仓库也有了。
在这里插入图片描述
那么为什么有的朋友几个人修改一个分支还会有冲突呢?
我们修改远程的代码并提交
在这里插入图片描述
之后可以看到commit id
在这里插入图片描述
修改本地文件的同一行内容
在这里插入图片描述
git push发现和之前一样,但是git pull后却发现自动merge失败,出现了冲突!!!
在这里插入图片描述
查看文件,可以看到增加了很多内容
在这里插入图片描述
每个冲突地方的格式如下:

<<<<<<< HEAD
本地工作区内容
=======
远程仓库内容
>>>>>>> 远程仓库提交时的commit id

可以看到修改同一个文件的同一行时会出现冲突,因为git不知道到底需要保留哪一个。这个时候就需要你们自行商量,解决后再push。具体如何做呢?

我们终止merge,因为无法自动merge,然后再次pull

git merge --abort
git pull --rebase

在这里插入图片描述
可以看到一些提示,手动解决冲突后,在git add/rm,然后git rebase --continue。之后就正常了。此时查看git status也是差不多的提示。
在这里插入图片描述
git push时注意,没有在分支上,push后再切换回分支即可。
在这里插入图片描述
可以看到已经正常了
在这里插入图片描述

同分支git push出现问题解决步骤:

  1. git push 后发现reject问题
  2. git pull 看看能否自动merge,如果可以,就不用管了,说明修改的不同文件或同一文件的不同行
  3. git merge --abort 放弃merge
  4. git pull --rebase
  5. git add/rm 手动解决冲突后add或rm
  6. git rebase --continue 无需commit,直接 git rebase即可
  7. git push

分支合并冲突与解决

创建test分支后,修改了master分支,一般都是把其他分支合并到master分支,我们先制造冲突
修改test分支
在这里插入图片描述
切换test并pull下来
在这里插入图片描述
在master分支合并
在这里插入图片描述
发现冲突,解决后add,commit,push即可
在这里插入图片描述
push结果如下:
在这里插入图片描述
总结如下:

  1. 一个分支修改(如test、dev、feature等)
  2. 修改完后切换到想要合并的分支(如master),使用git merge xxx来合并
  3. 如果没冲突,push即可
  4. 手动修改冲突文件
  5. git add 冲突的文件
  6. git commit
  7. git push

常见问题

.gitignore失效问题

如果某文件已在远程仓库中,想忽略后续更改,.gitignore不生效,需要git add时忽略。如果此文件不需要在远程仓库中,可以删除后添加到.gitignore。

不冲突/单分支冲突/合并冲突的情况有哪些?

1.单分支修改同一个文件的不同行不会发生冲突
2.单分支修改同一个文件的相同行会发生冲突
3.当文件行数 只有 2 行时,不同分支修改同一个文件的相同行会发生合并冲突
4.当文件行数 只有 2 行时,不同分支修改同一个文件的不同行会发生合并冲突
4.当文件行数 大于 2 行时,不同分支修改同一个文件的不相同且非相邻行不会发生合并冲突
5.当文件行数 大于 2 行时,不同分支修改同一个文件的相同或相邻行会发生合并冲突

更多问题欢迎在评论区评论!!!

参考

git-windows安装包
git-scm.com

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

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

相关文章

【linux】进程间通信——管道通信

进程间通信一、进程间通信1.1 通信的介绍1.2 通信的目的1.3 通信的分类二、管道2.1 匿名管道2.1.1 pipe2.2.2 读写特征2.2.3 命名管道一、进程间通信 1.1 通信的介绍 通信就是一个进程把数据传递给另一个进程&#xff0c;但是每个进程都具有独立性。通信的本质&#xff1a;OS需…

STL——vector

一、标准库中的vector 1.vector文档介绍 &#xff08;1&#xff09;vector是表示可变大小数组的序列容器。 &#xff08;2&#xff09;像数组一样&#xff0c;vector也采用连续存储空间来存储元素&#xff0c;也就意味着可以采用下标对vector的元素进行访问&#xff0c;和数…

深度:用10000字总结了嵌入式C语言必学知识点

导读&#xff1a;怎么做好嵌入式&#xff1f;相信这个问题无论问谁你都会得到一句学好C语言&#xff01;今天推荐一篇大佬写的嵌入式C语言知识点总结&#xff0c;非常值得一读。 目录 1 关键字 2 数据类型 3 内存管理和存储架构 4 指针和数组 5 结构类型和对齐 6 预处理…

RDC 2022纪念版开发板-D1S在RT-Smart运行

开发环境 软件 ubuntu20.04VMware Workstation 硬件 RDC2022纪念版开发板全志D1s芯片 材料下载 首先打开虚拟机&#xff0c;创建一个目录存放本次测试的代码&#xff0c;然后克隆RT-Smart用户态代码。 git clone https://github.com/RT-Thread/userapps.git在userapps目…

SMB2协议特性之oplock与lease(下

前期回顾上篇文章我们介绍了oplock/lease的相关概念及其基本工作原理&#xff0c;由于间隔时间较长&#xff0c;忘记的读者可以先去回顾一下。本篇文章带大家了解一下&#xff0c;在实际场景中&#xff0c;oplock/lease是如何工作的。实际场景分析在一些警匪影视剧中&#xff0…

PCI驱动程序框架

PCI驱动程序框架 文章目录PCI驱动程序框架参考资料&#xff1a;一、 PCI驱动框架二、 RK3399驱动致谢参考资料&#xff1a; 《PCI Express Technology 3.0》&#xff0c;Mike Jackson, Ravi Budruk; MindShare, Inc.《PCIe扫盲系列博文》&#xff0c;作者Felix&#xff0c;这是…

【NS2】打印c++函数名字/bash将echo赋值给变量

需求&#xff1a;将tcl在c调用的路由算法名字&#xff08;函数名&#xff09;输出&#xff0c;并作为变量赋值给文件名字&#xff0c;但就怎么将函数名字打印出来就思考了很久&#xff0c;并尝试了其他网站“在shell脚本使用tcl变量、如何在bash脚本打印tcl变量、NS2&#xff0…

【实际开发12】- 经验 experience

目录 1. 经验 experience 1. 无多大价值 , 停留数据展示层面 2. 保证数据一致性问题 3. 新增时 , 可先关注核心基础数据 ( 复杂数据以修改形式完善 ) 4. 新增 / 修改 ( 幂等性处理 ) 5. 增 / 删 / 改 添加日志 , 查询无需日志 6. 需要对接多模块的通用字段设计 : String…

什么是CRM系统 企业如何选择合适的CRM系统

在如今市场竞争激烈情况下&#xff0c;企业更加注重客户的数据和管理&#xff0c;因此逐渐形成了“以客户为核心”的理念。而借助CRM系统管理客户数据已然成为一种趋势。 选择一款适合企业的CRM系统可以帮助企业实现更多的价值。但一些企业在初期根本不了解什么是CRM系统&…

Hadoop安装(一) --- JDK安装

目录 1.安装虚拟机 2.关防火墙 3.修改网络配置文件 4.重启网络服务 5.连接shell 6.安装vim工具 7.免密登陆 8. 开启远程免密登录配置 9.远程登录 10.同步时间 10.1.安装ntpdate 10.2.定时更新时间 10.3.启动定时任务 10.4.查看状态 11.修改计算机名 12.配置ho…

数据仓库的架构以及传统数据库与数据仓库的区别

一、数据仓库的分层架构 数据仓库的数据来源于不同的源数据&#xff0c;并提供多样的数据应用&#xff0c;数据自下而上流入数据仓库后向上层开放应用&#xff0c;而数据仓库只是中间集成化数据管理的一个平台。 1&#xff0c;源数据层&#xff08;ODS&#xff09; 操作性数…

袁树雄和杨语莲究竟什么关系 ,《早安隆回》走红后又是《汉川》

自从《早安隆回》火爆全网后&#xff0c;歌迷们就有一种担心&#xff0c;不知道这首好听的歌曲&#xff0c;究竟还能再够火爆多久。歌迷们的担心也不无道理&#xff0c;毕竟花无百日红&#xff0c;人无千般好&#xff0c;《早安隆回》就是再好听&#xff0c;也不可能红一辈子吧…

windows搭建go语言开发环境

1.下载Go语言开发包可以在Go语言官网 ( https://golang.google.cn/dl/ )下载Windows 系统下的Go语言开发包&#xff0c;如下图所示。这里我下载的是 64位的开发包&#xff0c;如果读者的电脑是 32 位系统的话&#xff0c;则需要下载 32 位的开发包&#xff0c;在上图所示页面中…

Fiddler手机抓包

手机抓包软件Fiddler 下载地址以及下载流程 Fiddler 下载地址&#xff1a;https://www.telerik.com/download/fiddler 下载后直接一键安装即可 重要的注意项卸载最前面 pc和手机需要在同一个局域网&#xff0c;也就是同一个wifi 配置 Fiddler界面的简单介绍 pc端Fildde…

Windows Server 2022 Install Veeam ONE 12

借助有关 Veeam Backup & Replication™ 和 Veeam Agents 及 VMware vSphere、Microsoft Hyper-V 和 Nutanix AHV 的洞察&#xff0c;Veeam ONE™ 可通过交互式工具和智能学习提供深度智能监控、报告和自动化功能&#xff0c;帮助客户发现问题并前瞻性地解决问题。 Veeam O…

CUDA编程之CUDA流

文章目录前言CUDA流在默认流中重叠主机与设备用非默认CUDA流重叠多个核函数的执行重叠多个核函数的例子用非默认CUDA流重叠核函数的执行与数据传递不可分页主机内存与异步的数据传输函数总结参考前言 CUDA程序的并行层次主要有两个&#xff0c;一个是核函数内部的并行&#xff…

C++面向对象——C++ 重载运算符和重载函数

C面向对象——C 重载运算符和重载函数C 重载运算符和重载函数C 中的函数重载C 中的运算符重载运算符重载实例C 一元运算符重载C 二元运算符重载C 关系运算符重载C 和 -- 运算符重载C 赋值运算符重载C 函数调用运算符 () 重载C 下标运算符 [] 重载C 类成员访问运算符 -> 重载…

三、进程通信

一、基础知识数据传输一个进程将他的数据发送给另一个进程资源共享多个进程间共享同样的资源通知时间一个进程向另一个进程发送消息&#xff0c;通知他们发生了某种事情通信方式&#xff1a;管道和有名管道信号signal消息队列共享内存信号量套接字二、管道&#xff1a;无名管道…

c++11 标准模板(STL)(std::multiset)(六)

定义于头文件 <set> template< class Key, class Compare std::less<Key>, class Allocator std::allocator<Key> > class multiset;(1)namespace pmr { template <class Key, class Compare std::less<Key>> usi…

基于python Django 餐馆点菜管理系统

问题描述&#xff1a; 随着网络的迅速发展&#xff0c;越来越多的人开始接受甚至时依赖了网络营业的这种交易形式&#xff0c;传统的点菜模式不仅浪费时间&#xff0c;效率低下&#xff0c;而且特别耗费成本与人力&#xff0c;因此不少商家开始使用网上点菜系统。网上点菜系统是…