首页 > 其他分享 >Git实战

Git实战

时间:2023-05-07 17:56:12浏览次数:47  
标签:实战 git Git 版本 commit 云端 分支

1. Git简介

1.1 什么是Git

Git是一个分布式的版本控制软件。

  • 软件,类似于QQ、office等安装到电脑上才能使用的工具;
  • 版本控制,类似于毕业论文,需要反复修改和保留原历史数据;
  • 分布式
    • 文件夹拷贝
    • 本地版本控制
    • 集中式版本控制
    • 分布式版本控制

1.2 为什么要做版本控制

要保留之前的所有版本,一边回滚和修改。

1.3 安装Git

详见:https://git-scm.com/book/zh/v2/起步-安装-Git

2. Git基本命令

想要让Git对一个目录进行版本控制的步骤:

  • 进入要管理的文件夹

  • 执行初始化命令

    git init
    
  • 管理目录下文件的状态

    git status
    # 新增文件或修改过后的文件为红色
    
  • 管理文件(管理后的文件为绿色)

    git add 文件名
    # 或者
    git add .
    
  • 个人信息配置:用户名、邮箱

    git config --global user.email "个人邮箱"
    git config --global user.name "个人用户名"
    
  • 生成版本

    git commit -m "版本描述信息"
    
  • 查看版本记录

    git log
    
  • 回滚至之前版本

    git log  # 查看版本信息,取得版本号
    git reset --hard 版本号
    
  • 回滚至之后版本

    git reflog  # 查看版本信息,取得版本号。由于已经回滚至之前某一版本了,所以需要用到reflog
    git reset --hard 版本号
    

image-20230327101312060

3. 引入分支

分支可以给使用者提供多个环境,意味着可以保留主线不动,在分支上修改、新增文件,以免影响主线。

image-20230327142241776

  • 查看分支

    git branch
    
  • 创建分支

    git branch 分支名称
    
  • 切换分支

    git checkout 分支名称
    
  • 合并分支

    git merge 要合并的分支名称
    

    【注意】合并分支指的是:站在某一分支,将另一分支合并过来;另一分支不会发生改变;也有可能产生冲突。

  • 删除分支

    git branch -d 分支名称
    

一般的工作流程是:有一主分支master,存储稳定运行的版本。

当需要开发新功能时,新建立一个develop分支,或者feature分支,独立开发新的功能--->新功能开发完--->通过测试--->确定没问题--->合并到主分支(master)中。

当需要修复bug时,也是:新建立bug分支--->修复漏洞--->通过测试--->确定没问题--->再合并到主分支(master)中。

4. 上传云端

Git是分布式版本控制软件,除了可以在本地做版本控制,也可以有一个云端仓库,这样就可以摆脱地点限制了。

而云端仓库,可以选择官方建立的GIthub,也可以使用国内主流平台Gitee(码云)。


注册账号之后,创建仓库,拿到云端仓库地址

本地仓库与云端仓库建立关联:

git remote add origin 云端仓库地址

向云端仓库推送代码

git push -u origin 分支名称

在新设备第一次获取云端仓库

git clone 云端仓库地址(内部已实现git remote add origin 云端仓库地址)

往后获取云端代码(获取最新代码,不必再clone,使用pull)

git pull origin 分支名称

【注意】

git pull origin 分支名称
# 相当于
git fetch origin 分支名称
git merge origin/分支名称

5. rebase作用

rebase(变基),可以让提交记录变得简洁,合并分支不分叉。

5.1 减少版本记录

rebase的第一个使用场景,是减少版本记录。比如下面有4个版本记录,如果觉得版本记录太多了,不方便,就可以使用rebase命令,将某些版本记录整合成一个。

image-20230327144956275

git rebase -i e9d937823afe2a50183137084cf43d180a5c34ec

e9d937823afe2a50183137084cf43d180a5c34ec是第2个版本的版本号。

上式的意思是,将当前所在的版本号(第4版本)与第2个版本号之间的记录进行整合。

也可以这样写:

git rebase -i HEAD~3

表示将最近的三条版本记录进行合并

这时会出现设置界面:

image-20230327145923232

pick e9d9378 2
pick ec38e42 3
pick 73dfd33 4

# Rebase 9ad0c8e..73dfd33 onto 9ad0c8e (3 commands)
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup [-C | -c] = like "squash" but keep only the previous
# commit's log message, unless -C is used, in which case
# keep only this commit's message; -c is same as -C but
# opens the editor
# x, exec = run command (the rest of the line) using shell
# b, break = stop here (continue rebase later with 'git rebase --continue')
# d, drop = remove commit
# l, label

将某一些版本前的【动作】设置为 s,表示将它们合并。

image-20230327150905057

image-20230327151118068

image-20230327151213334

image-20230327152005818

这时,最新的三个版本信息就合并成为一个了。

image-20230327152048460

【注意】如果版本信息已经提交到云端仓库,就不要再合并版本了。不然本地和云端的记录不一样,会出现麻烦。

5.2 减少分叉

如果两个分支各自进行向前开发,最终合并的时候一定会有分叉记录。

可以使用下面的命令查看分叉记录:

git log --graph

image-20230327160244508

更简洁地查看分叉:

git log --graph --pretty:"%h %s"

【h表示版本的哈希值;s表示版本的描述信息】

image-20230327160518569


而rebase可以减少这个分支。

案例:先在dev分支中建立dev.txt;再在master中建立master.txt;

此时如果直接站在master分支上合并dev,则会产生类似上图的分支结构。

如果不想出现这种分支结构,可以这样做:

  1. 先在dev分支下执行下面的命令:
git rebase master
  1. 再切换到master分支中,合并dev分支
git checkout master
git merge dev

image-20230327161601917

5.3 减少因云端而产生分叉

这种情景和第二种情景很类似。

某一版本产生两个分支,分别独立进行开发,继而合并到一起。此时会产生分叉。

5.2的情景是在本地中产生的,而加入云端仓库之后,在不同的折本进行开发,会更容易产生分叉。

以前使用的从云端仓库拉代码到本地的命令是:

git pull origin 分支名称

这个命令相当于以下两个命令的集合:

git fetch origin 分支名称
git merge origin 分支名称

本质上就是从云端仓库中复制一条分支下来,并将之合并到本地的分支中。

如果云端的分支被pull到不同的设备,不同的设备独立开发。

那么后面pull代码的一方,就会产生分叉。

如果不想产生分叉的话,可以使用下面两个命令:

git fetch origin 分支名称  # 先拉云端仓库的代码到本地
git rebase origin/分支名称

【此处存疑:最后是否需要在执行merge命令?】

6. Beyond Compare

Beyond Compare是一个数据对比软件,Git可以结合它来快速解决合并时的冲突问题。

步骤:

  1. 安装Beyond Compare

  2. 在Git中配置【--local 参数表示仅在当前项目生效】

    git config --local merge.tool bc3  # 关联一个合并工具,该工具取名“bc3”
    git config --local mergetool.path "/usr/local/bin/bcomp"  # 设置工具执行文件的路径
    git config --local mergetool.keepBackup false  # 设置不保留源文件的备份
    
  3. 当有冲突文件时,使用以下命令,调用该工具进行修改

    git mergetool
    

image-20230327165410447

标签:实战,git,Git,版本,commit,云端,分支
From: https://www.cnblogs.com/zibuyu2015831/p/17379677.html

相关文章

  • git介绍
    1.工作流程: 2.分支管理: 3.输入命令gitinita,在a文件夹中创建隐藏文件.git: 4.查看隐藏文件夹: 5.git介绍总结: ......
  • Python数据分析与挖掘实战笔记
    (声明:这些代码只是看书的时候跟着敲一敲,留个印象,为的是以后用到有个方便快速查找看个思路,并没有真正运行。)数据挖掘建模过程数据挖掘建模过程:定义挖掘目标:明确挖掘目标,弄清用户需求。数据采样:采样标准(相关性、可靠性、有效性)采样方法:随机、分层、等距数据探索:进行探索......
  • DX12 实战 blend
    前言本篇将展示如何使用DX12实现blend源代码D3D12atblend要点over&under算子blend的实现是基于over算子和under算子over含义:应对半透明物体在不透明物体前或半透明物体和半透明物体间的情况,它的顺序是从后向前——从源像素(PS中输出的片元)到目标像素(缓冲区内的片元)......
  • 使用git add添加完文件,想要撤销
    gitresetHEAD<file>...参考https://git-scm.com/book/zh/v1/Git-%E5%9F%BA%E7%A1%80-%E6%92%A4%E6%B6%88%E6%93%8D%E4%BD%9C......
  • git 配置远程仓库
    本文是为了使用git拉取和推送时,能够免密同步远程服务器ps:首先要有一台远程服务器其次是远程服务器和本地,都安装了git生成密钥ssh-keygen参数说明使用ssh-keygen生成密钥,几个主要使用的参数-t指定加密算法-C指定密钥注释(相当于对密钥添加一个名字)-f指定要......
  • 删除GitHub上的历史commit
    1.背景由于之前的加水印脚本存在问题,在对同一张图片进行加水印时,会有一定的概率产生不一样md5的图片,在git提交的时候,就认为被修改了,从而被提交的github仓库中,如此反反复复,到现在已经有11个G大小了;今天把水印脚本重写了一下,解决了上述问题,所以准备给之前的垃圾提交清理了,让我的博......
  • Nginx 入门实战(3)--Nginx 常用配置参数说明
    Nginx中包含众多的参数,这些参数影响Nginx的行为;本文主要介绍一些常用的参数。1、Nginx配置文件基本结构Nginx的配置文件为conf/nginx.conf,配置文件由配置指令/参数组成,有些指令/参数位于main的位置(如:events、http),有些指令/参数位于其他参数下(如:server位于http下);......
  • 【Spring Boot】实战Spring Boot(二)——Hello World 小试牛刀
    一、前言      在上一篇博客,小编向大家介绍了SpringBoot是什么,在上面时候使用。但是空洞的理论的开始总会有一个helloworld的小程序开始,在这篇博客中,小编就向大家介绍一下使用SpringBoot完成一个Helloworld程序。二、环境准备一款不错的IDE:Eclipse、IdeaIntellij(力荐)m......
  • ICT实战系统集成-LAB9-Samba文件共享服务器管理
    ICT实战系统集成-LAB9-Samba文件共享服务器管理实验步骤1安装samba服务端安装samba、samba-common、samba-clientyuminstallsambasamba-commonsamba-client启动samba:ststemctlstartsmb.service查看samba状态2添加系统组share,添加系统账号xiaoming、hanmeimei......
  • ICT实战系统集成-LAB6-openEuler管理文件系统及存储
    LAB6-openEuler管理文件系统及存储1实验要求1.1添加两块scsi硬盘,大小分别为10G1.2对新添加的硬盘1(如:/dev/sdb)进行MBR分区、格式化、挂载1、使用fdisk对/dev/sdb进行分区:/dev/sdb1为主分区1大小2G、/dev/sb2为扩展分区大小8G,在/dev/sb2的基础上建立扩展分区/dev/sdb5,大小......