Git分布式版本控制工具

11/24/2022

1、基本介绍

1.1 版本控制器分类

  a、集中式版本控制工具

    集中式版本控制工具,版本库集中存放在中央服务器,每个人工作时从中央服务器下载代码,必须联网才能下载。个人修改后然后提交到中央版本库。

   举例:SVN和CVS

  b、分布式版本控制工具

  分布式版本控制系统,没有中央服务器,每个人的电脑都是一个完整的版本库,这样工作的时候,不需要联网,版本库在自己的电脑上。多人习作只需要将各自修改推送给对方,就能互相看到对方修改了。

   举例:Git 

1.2 SVN(过时)

1.3 Git

  作者:Linux Torvalds

  用途:帮助管理Linux内核开发的一个开放源码的版本控制软件

1.4 Git工作流程图

命令如下:

  1、 add:添加,将代码添加到暂存区

  2、commit:提交,将暂存区的代码提交到本地库

  3、checkout

  4、fetch/clone:

    fetch:抓取,从远程仓库抓取代码到本地仓库,不进行任何合并

    clone:克隆,从远程仓库克隆代码到本地仓库

  5、push:推送,将本地库的代码推送到远程仓库

  6、pull:拉取,从远程库拉取代码到本地库,自动合并(merge),然后放到工作区,相当于fetch+merge

2、Git安装与常用命令

  储备知识:

    ls/ll:查看当前文件目录

    cat:查看文件内容

    touch:创建文件

    vi:vi编辑器

2.1 Git环境配置

2.1.1 下载与安装

  下载地址:https://git-scm.com/

  Git安装:

    1、双击,按照提示默认安装(修改一下安装路径)

    

    2、成功标识:电脑桌面右键显示如下菜单,表示安装成功

    

  提示:

    Git GUI Here:图形化界面

    Git Bash Here:命令行工具

2.1.2 基本配置

  1、配置用户名email地址

     git config --global user.name "itcast"

     git config --global user.email "hello@itcast"

  2、查看配置信息

    git config --global user.name

    git config --global user.email

2.1.3 为常用指令配置别名

  1、打开用户目录,创建.bashrc文件

    方式一:直接到C盘的用户目录下去创建".bashrc"目录

    方式二:打开Git Bash,通过命令的方式创建

      touch ~/.bashrc

  2、在.bashrc文件中输入如下内容

   #用于输出git提交日志
    alias git-log='git log --pretty=oneline --all --graph --abbrev-commit'
    #用于输出当前目录所有文件及基本信息
    alias ll='ls -al'

  说明:

    用户目录:wszpa就是一个用户目录

2.1.4 解决GitBash软吗问题

  1、打开Git Bash执行下面命令

   git config --global core.quotepath false

  2、${git_home}/etc/bash.bashrc文件最后面加两行

   export LANG="zh_CN.UTF-8"

   export LC_ALL="zh_CN.UTF-8"

2.2 获取本地仓库

  获取本地仓库的步骤:

    1、在电脑的任意位置创建一个空目录(例如test),作为我们的本地仓库

    2、进入这个目录,点击Git bash窗口

    3、执行命令git init

        git init

    4、创建成功,生成.git目录      

2.3 基础操作指令

  Git工作目录下对于文件的修改会存在几个状态,这些修改的状态会随着我们执行Git命令而发生变化。

2.3.1 查看修改的状态(status)

  命令:git status

2.3.2 添加工作区到暂存区(add)

  命令:git add 单个文件名|通配符

  案例:将所有修改加入到暂存区

    git add .

2.3.3 提交暂存区到本地仓库(commit)

  命令:git commit -m '注释内容'

  案例:

    git commit -m 'add file file01.txt'

2.3.4 查看提交日志(log)

  作用:查看提交记录

  命令形式:git log [option]

  • options
    • --all:显示所有分支
    • --pretty=oneline:将提交信息显示为一行
    • --abbrev-commit:使得输出的commitId更短
    • --graph:以图形的形式显示

2.3.5 切换版本

  命令:git reset --hard commitID

    • commitID可以使用git-log指令查看

     说明:git-log指令是常用指令的别名,在上面有配置。

  查看删除记录:

    git reflog:这个指令可以看到已经删除的提交记录。

2.3.6 添加文件至忽略列表

  在工作目录中创建一个名为.gitignore的文件,列出要忽略的文件模式。

# no .a files
*.a
# but do track lib.a, even though you're ignoring .a files above
!lib.a
# only ignore the TODO file in the current directory, not subdir/TODO
/TODO
# ignore all files in the build/ directory
build/
# ignore doc/notes.txt, but not doc/server/arch.txt
doc/*.txt
# ignore all .pdf files in the doc/ directory
doc/**/*.pdf

练习:基础操作

#####################仓库初始化######################
# 创建目录(git_test01)并在目录下打开gitbash#
初始化git仓库
git init
#####################创建文件并提交#####################
# 目录下创建文件 file01.txt#
将修改加入暂存区
git add .
# 将修改提交到本地仓库,提交记录内容为:commit 001
git commit -m 'commit 001'
# 查看日志
git log
####################修改文件并提交######################
# 修改file01的内容为:count=1#
将修改加入暂存区
git add .
# # 将修改提交到本地仓库,提交记录内容为:update file01
git commit --m 'update file01'
# 查看日志
git log
# 以精简的方式显示提交记录
git-log
####################将最后一次修改还原##################
# 查看提交记录
git-log
# 找到倒数第2次提交的commitID# 版本回退
git reset commitID --hard

2.4 分支

2.4.1 查看本地分支

  命令:git branch

2.4.2 创建本地分支

  命令:git branch 分支名

2.4.3 切换分支

  命令:git checkout 分支名

  注意:直接切换到一个不存在的分支上(创建并切换分支)

    命令:git checkout -b 分支名

2.4.4 合并分支

  一个分支上的提交可以合并到另一个分支

  命令:git merge 分支名称

2.4.5 删除分支

  不能删除当前分支,只能删除其他分支

  命令:

    git branch -d 分支名  删除分支时,需要做各种检查

    git branch -D 分支名  不做任何检查,强制删除

2.4.6 解决冲突

  当两个分支上对文件的修改可能会存在冲突,例如同时修改了同一个文件的通过一行,这时就需要手动解决冲突。

  解决冲突步骤:

    1. 修改文件中冲突的地方

    2. 将解决完冲突的文件添加的暂存区(add)

    3. 再提交到本地库

    4. 具体操作不清楚的可以参考一下下面的详细操作流程

  

2.4.7 开发中分支使用原则和流程

  分支使用远程和流程:

    • master(生产)分支

      线上分支,主分支

    • develop(开发)分支

      从master分支创建的,作为开发部门主要开发分支,开发阶段完成后,需要合并到主分支。

    • feature(功能)分支

      从develop分支创建,分支上的研发任务完成后,合并到develop分支。

    • hotfix(补丁修复分支)

      从master派生的分支,一般作为bug修复使用,修复完成后需要合并到master、test、develop分支。

    • 其他分支

      例如:test分支(用于代码测试)、pre分支(预上线分支)

3、Git远程仓库

3.1 常用的托管服务【远程仓库】

  GitHub:https://github.com/国外代码托管平台,速度不稳定

  Gitee: https://gitee.com/ 国内代码托管平台,速度快

  GitLab: https://about.gitlab.com/ 搭建git私服

3.2 注册马云

3.3 创建远程仓库

  仓库创建·完成后,可以看到仓库地址,如下图所示:

3.4 配置SSH公钥

  • 生成SSH公钥
    • ssh-keygen -t rsa
    • 不断回车
      •   如果公钥已经存在,则自动覆盖
  • Gitee设置账号公钥
    • 获取公钥
      •   cat ~/.ssh/id-rsa.pub

    • 验证是否配置成功
      • ssh-T git@gitee.com

3.5 远程操作

3.5.1 添加远程仓库

  此操作是先初始化本地库,然后与一创建的远程库进行对接。

  命令:git remote add <远端名称> <仓库路径>

    远端名称:默认是origin

    仓库路径:从远端服务器设置

    例如:git remote add origin git@gitee.com:wan-shizhen/git_test.git

    

3.5.2 查看远程仓库

  命令:git remote

  

3.5.3 推送到远程仓库

  命令:git push [-f] [--set-upstream] [远程名称 [本地分支名] [:远端分支名]]

    • 远端分支名和本地分支名相同,则可以只写本地分支
      • git push origin master
    • -f 表示强制覆盖
    • --set-upstream推送到远端的同时并且建立起和远端分支的关联关系。
      • git push --set-upstream origin master
    • 如果当前分支已经和远端分支关联,则可以省略分支名和远端名
      • git push 将master 分支推送到已经关联的远端分支。

        

  查询远程仓库:

  

3.5.4 本地分支与远程分支的关系

  • 查看关联关系我们可以使用 git branch -vv 命令

3.5.5 从远程仓库克隆

  如果已经有一个远端仓库,我们直接clone到本地。

  • 命令:git clone <仓库路径> [本地目录]
    • 本地目录可以省略,会自动生成一个目录

      

3.5.6 从远程仓库中抓取和拉取

  • 抓取命令:git fetch [remote name] [branch name]
    • 抓取命令就是将仓库里的更新都抓取到本地,不会进行合并
    • 如果不指定远端名称和分支名,则抓取有分支。
  • 拉取命令:git pull [remote name] [branch name]
    • 拉取指令就是将远端仓库的修改拉到本地并自动进行合并,等同于fetch + merge
    • 如果不指定远端名称和分支名,则抓取所有远端分支,并更新到当前分支。
  • 拉取命令:git pull [remote name] [branch name]
    • 拉取指令就是将远端仓库的修改拉到本地并自动合并,等同于fetch + merge
    • 如果不指定远端名称和分支名,则抓取所有并更新当前分支

    注意:本地仓库要先关联一下远端名称

3.5.7 解决合并冲突

  问题描述:A、B用户都从同一个远程仓库拉取代码,A用户修改file.txt文件后优先于B提交远程仓库,此时B也修改了file.txt文件。由于A优先提交到远程仓库,故B需要将远程仓库代码再次更新到本地仓库。但由于A,B都修改了file.txt文件的同一行。此时远程仓库代码与B本地仓库代码合并产生冲突。

  解决方法:与本地仓库分支合并产生冲突的处理方法相同。

    1. 修改冲突代码,提交到本地仓库

    2. 重新push远程仓库

4、在Idea中使用Git

4.1 在Idea中配置Git

4.2 在Idea中操作Git

  主要包括:

    • 创建本地库
    • 创建远程连接
    • 本地库push远程库
    • 远程库pull本地库

附:IDEA集成GitBash作为Terminal

  集成成功后的效果图

posted @   mqBolg  阅读(67)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示