首页 > 其他分享 >【2022-11-08】Git使用

【2022-11-08】Git使用

时间:2022-11-08 21:11:55浏览次数:42  
标签:11 git -- 08 仓库 Git 版本 分支

一、Git介绍

# Git简介
Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。

Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

官网地址为:https://git-scm.com/
    
# Git作用

1 对文件(代码)进行版本管理
2 完成 协同开发 项目,帮助程序员整合代码
	i)帮助开发者合并开发的代码
	ii)如果出现冲突代码的合并,会提示后提交合并代码的开发者,让其解决冲突

# Git和SVN的区别
1 SVN是集中式版本控制系统,而Git是分布式版本控制系统,这是Git和其它非分布式的版本控制系统,例如SVN,CVS等,最核心的区别。
2 Git把内容按元数据方式存储,而SVN是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似.svn,.cvs等的文件夹里。
3 Git分支和SVN的分支不同:分支在SVN中一点不特别,就是版本库中的另外的一个目录。
4 Git没有一个全局的版本号,而SVN有:目前为止这是跟SVN相比GIT缺少的最大的一个特征。
5 Git的内容完整性要优于SVN:Git的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。

二、Git工作流程

# 工作流程如下:

    1 从远程仓库中克隆 Git 资源作为本地仓库;
    2 从本地仓库中checkout代码然后进行代码修改;
    3 在提交本地仓库前先将代码提交到暂存区;
    4 提交修改,提交到本地仓库;本地仓库中保存修改的各个历史版本;
    5 在需要和团队成员共享代码时,可以将修改代码push到远程仓库。
    
# 注意点:
    """
    1)有红色信息(工作区有内容),就执行 add 
    2)全绿信息(内容全部在暂存区),才执行 commit
    3)只有被版本库控制的代码,才能被监听,所以可以回滚到任何一个版本
    """

三、Git常用命令

3.1 初始化仓库

# 初始化仓库
	git init

3.2 在仓库中新增文件

# 在仓库中新增文件
	touch test.py

3.3 查看仓库状态

# 查看仓库状态
	git status

3.4 配置用户信息

# 配置用户信息
	局部配置---》只针对于当前仓库--》当前仓库.git文件夹下的config中
         git config user.name 'dy12138'
		git config user.email '[email protected]'
    全局配置---》针对于所有仓库---》 C:\Users\用户文件夹\.gitconfig新建用户信息,在所有仓库下都可以使用
         git config --global user.name 'dy12138'
         git config --global user.email '[email protected]'

3.5 把工作区内容提交到暂存区

# 5 把工作区内容提交到暂存区
	git add .      # 把工作区所有更改都提交到暂存区
    git add 文件名  # 把工作区当前文件的更改都提交到暂存区    

3.6 把暂存区提交到版本库,不要忘记加注释

# 6 把暂存区提交到版本库,不要忘记加注释
	git commit -m '提交了test.py'

3.7 修改一下test.py ,再提交到本地版本库

# 7 修改一下test.py ,再提交到本地版本库
    git status   # 状态变成了红色
    git add .    # 提交到暂存区
    git status   # 状态变成了绿色
    git commit -m '修改了test.py'
    git status   # 没有变化

3.8 查看版本情况,本地版本库有哪些版本,一个版本有一个唯一id号

# 8 查看版本情况,本地版本库有哪些版本,一个版本有一个唯一id号
    git log     # 详细的显示
    git reflog  # 精简的显示

3.9 修改test.py后,进行回退操作

# 9 修改test.py后,进行回退操作
    git checkout .  # 当前所有的更改都回退,不包含新增的文件

3.10 把123.txt,先提交到暂存区

# 10 把123.txt,先提交到暂存区
    新增123.txt
    git add .
    git status      # 123.txt变绿了
    git reset HEAD  # 123.txt变红了,说明从暂存区拉回到了工作区

3.11 把版本库内容,回退到暂存区

# 11 把版本库内容,回退到暂存区
    git reset --soft 上一个的版本号  

3.12 从版本库拉回到工作区

# 12 从版本库拉回到工作区
    git reset --版本号
    git reset --mix 版本号  

3.13 撤销版本库提交:commit的逆向运算

"""
回滚暂存区已经提交到版本库的操作:
    查看历史版本:
        >: git log
        >: git reflog
    查看时间点之前/之后的日志:
        >: git log --after 2018-6-1
        >: git log --before 2018-6-1
        >: git reflog --after 2018-6-1
        >: git reflog --before 2018-6-1
    查看指定开发者日志
        >: git log --author author_name
        >: git reflog --author author_name
    回滚到指定版本:
        回滚到上一个版本:
            >: git reset --hard HEAD^
            >: git reset --hard HEAD~
        回滚到上三个版本:
            >: git reset --hard HEAD^^^
            >: git reset --hard HEAD~3
        回滚到指定版本号的版本:
            >: git reset --hard 版本号 (重点)
            >: eg: git reset --hard 35cb292
"""

3.14 git log和git reflog

git log 和git reflog的区别
git log 命令可以显示所有提交过的版本信息如果感觉太繁琐,可以加上参数 --pretty=oneline,只会显示版本号和提交时的备注信息
git reflog 命令可以查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)

git reset --hard,--mix,--soft的区别
hard (硬)-> 全部删除,会彻底返回到回退前的版本状态,了无痕迹mixed (中)-> 保留工作目录,文件回退到未commit的状态
soft (软)-> 保留工作目录、暂存区 ,文件会回退到未 add(未到暂存)的状态

总结:soft是撤销commit的提交,但工作区未提交的更改还是保留;mixed是撤销暂存区的提交,工作区的更改同样也保留;而hard是把工作区、暂存区、commit到仓库的三个版本都回滚了

四、Git过滤文件

在项目中,并不是所有文件都需要保存到版本库中的,例如“target”目录及目录下的文件就可以忽略。在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件或目录。

# 在仓库中新建 .gitignore,在文件中配置
        1)在仓库根目录下创建该文件
        2)文件与文件夹均可以被过滤
        3)文件过滤语法

        """ 过滤文件内容
        文件或文件夹名:代表所有目录下的同名文件或文件夹都被过滤
        /文件或文件夹名:代表仓库根目录下的文件或文件夹被过滤

        eg:
        a.txt:项目中所有a.txt文件和文件夹都会被过滤
        /a.txt:项目中只有根目录下a.txt文件和文件夹会被过滤
        /b/a.txt:项目中只有根目录下的b文件夹下的a.txt文件和文件夹会被过滤
        *x*:名字中有一个x的都会被过滤(*代表0~n个任意字符)
        空文件夹不会被提交,空包会被提交,包可以被提交(包中有一个init空文件)
        """

五、Git管理luffy项目

# 在项目根路径下输入git init
# 创建 .gitignore
# git add .   
# git commit -m '初始化项目'
# git status 

# 误删文件时,利用回滚操作可以快速恢复
# git log
# git reset --hard 版本号

六、Git分支开发

"""
1.创建分支
>: git branch 分支名

2.查看分支
>: git branch

3.切换分支
>: git checkout 分支名

4.创建并切换到分支
>: git checkout -b 分支名

5.删除分支
>: git branch -d 分支名

6.查看远程分支
>: git branch -a

7.合并分支
>: git merge 分支名
把dev分支合并到master分支:切换到master分支,执行合并dev分支的命令
"""

"""
1)多个开发者都是在一个分支上进行开发,不出意外,该分支一定叫dev(协同开发)
2)如果出现一个特殊任务(敏感任务),与正常业务关系不紧密,甚至可能大的影响正常的dev分支开发,可以依赖dev开一个子分支,进行开发,开发完毕后合并到dev分支,再删除该分支即可
3)所有的开发任务都可以在dev分支上进行(除非公司硬性要求不能直接在dev分支开发,只能在dev子分支开发,测试通过后才能合并给dev)
"""

七、Git远程仓库

我们要协同开发,代码要提交到远程仓库,可以使用gitee,github,gitlab,本文以gitee为例

7.1 创建远程仓库

# 首先注册gitee账号,登陆后,创建仓库

地址:https://gitee.com/dashboard

7.2 Git全局设置

git config --global user.name "dy12138"
git config --global user.email "[email protected]"

7.3 创建Git仓库

mkdir test
cd test
git init 
touch README.md
git add README.md
git commit -m "first commit"
git remote add origin https://gitee.com/Fly12138/test.git
git push -u origin "master"

7.4 已有仓库

cd existing_git_repo
git remote add origin https://gitee.com/Fly12138/test.git
git push -u origin "master"   # 把本地的主分支推到origin对应的远程分支

# 首次推送,需要输入gitee的账号和密码
        以后不需要输入用户名密码了
    		在windows的控制面板中找到-------->凭证管理   可以查看删除,也可以修改

7.5 luffy项目上传到远程仓库

# 1 创建远程仓库luffy_api】
# 2 git clone https://gitee.com/liuqingzheng/luffy_api.git  # 把远程仓库内容克隆到本地
# 3 把我们项目的代码,copy到 luffy_api这个文件夹下(.git文件夹不要copy)
# 4 git add .
# 5 git commit -m ‘初始化仓库’
# 6 git push origin master

八、SSH连接远程仓库

8.1 生成公钥私钥

# 打开cmd命令行或者Git Bash命令行,输入以下命令生成公钥私钥
	 ssh-keygen -t ed25519 -C "[email protected]"  
   
# 查看生成的公钥

	 cat ~/.ssh/id_ed25519.pub

8.2 添加SSH公钥

8.4 使用SSH连接远程仓库

1 删除origin   
		git remote remove origin
2 查看
		git remote
3 配置成ssh的地址
  	    git remote add origin [email protected]:liuqingzheng/luffy_api.git
4 以后直接拉去,提交代码即可
        git pull origin master
        git push origin master

标签:11,git,--,08,仓库,Git,版本,分支
From: https://www.cnblogs.com/dy12138/p/16871224.html

相关文章

  • Git
    git的介绍、git的功能特性、git工作流程、git过滤文件、git多分支管理、远程仓库、把路飞项目传到远程仓库(非空的)、ssh链接远程仓库,协同开发......
  • C++面经 ----- C++11新特性:左值右值
    概念左值:可以取地址并且有名字的东西就是左值。右值:不能取地址的没有名字的东西就是右值。纯右值:运算表达式产生的临时变量、不和对象关联的原始字面量、非引用返回......
  • C++ 面经 ----- C++11新特性:auto & decltype 类型推导
    C++11引入了auto和decltype关键字使用他们可以在编译期就推导出变量或者表达式的类型,方便开发者编码也简化了代码。 auto示例autoa=10;//10是int型,可以自动推导......
  • git的介绍、git的功能特性、git工作流程、git 过滤文件、git多分支管理、远程仓库、把
    Git(读音为/gɪt/)是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。[1]也是LinusTorvalds为了帮助管理Linux内核开发而开发的一个开......
  • 【流水】2022.11.08
    今天有是信息课看python,孩子人傻了赶紧luogu上用python水了几道题。今天考试除了暴力分拿的十分健全就没啥优点了可怜紫飨被gank到三机房去了,可怜(悲听说要......
  • idea集成git
    一、配置忽略文件1) 创建忽略规则文件xxxx.ignore(前缀名随便起,建议是 git.ignore)这个文件的存放位置原则上在哪里都可以,为了便于让~/.gitconfig 文件引用,建议也放在用......
  • 2022.11.08 NOIP2022 模拟赛五
    「LibreOJNOIPRound#1」DNA序列注意到\(k=10\),\(|\Sigma|=4\),故本质不同的子串个数只有\(4^10\)种,可以直接压位存下来。时间复杂度\(O(nk)\)。Codeconstint......
  • 闲话 22.11.8
    今天没有准备什么题(所以今天又是久违的纯闲话!但是今天下午想了这么一道题:给定\(n\)个区间\([l_i,r_i]\(0\lei<n)\)。设\(n\)阶多项式\(F(x)\)满足任意非常......
  • 11.8.4
    #include<stdio.h>intmain(){intn,i,x;intarr[100];scanf("%d",&n);for(i=0;i<n;i++){scanf("%d",&arr[i]); }scanf("%d",&x);for(i=0;i<n;i++){if(x!=arr[i]......
  • 11.8.5
    #include<stdio.h>intmain(){intarr[100];intn,i,j;scanf("%d",&n);for(i=0;i<n;i++){scanf("%d",&arr[i]);}if(n==0)printf("");else{printf("%d",arr[0]);......