• 【2023】Git版本控制-本地仓库详解


    1.Git是什么?它能做什么?


    Git是一个分布式版本控制系统,它主要用于跟踪和管理软件项目的源代码。它可以帮助开发人员在不同的团队成员之间协同工作,记录代码的修改历史,轻松地回滚到以前的版本,以及合并不同的代码分支。

    Git分为三个区域:

    • 工作区域
    • 暂存区域
    • 版本库

    Git的主要作用包括:

    • 版本控制:Git能够记录代码的每一次修改,并提供了强大的版本控制功能,使得开发人员可以轻松地查看和恢复到以前的版本。
    • 分支管理:Git允许开发人员创建多个分支来并行开发不同的功能或修复不同的bug。这样可以避免直接在主分支上进行修改,保证代码的稳定性。
    • 团队协作:Git支持多人协作开发,开发人员可以将自己的代码推送到远程仓库,并将其他人的修改合并到自己的本地仓库中。
    • 历史记录:Git会详细记录每次代码提交的信息,包括作者、时间、修改内容等,方便开发人员回溯查看代码的变更历史。
    • 分布式管理:Git是一种分布式版本控制系统,每个开发人员都可以有自己的本地仓库,可以在没有网络连接的情况下进行代码修改和提交。

    2.安装Git

    在centos上安装Git

    yum -y install git
    
    • 1

    3.Git版本管理

    3.1.Git初始化(创建仓库)

    • 选择要进行初始化的目录
    • 执行初始化命令
    • 查看目录,发现多了一个git目录
    [root@jenkins ~]# mkdir /cangku
    [root@jenkins ~]# cd /cangku/
    [root@jenkins cangku]# git init
    Initialized empty Git repository in /cangku/.git/
    [root@jenkins cangku]# ls -a
    .  ..  .git
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 查看状态
    [root@jenkins cangku]# git status
    # On branch master
    #
    # Initial commit
    #
    nothing to commit (create/copy files and use "git add" to track)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    当前是在master分支上;当前工作环境是干净的;可以使用git add将文件添加到暂存区。

    3.2.提交代码

    • 创建一个文件
    [root@jenkins cangku]# echo "hello git" >> file1.txt
    [root@jenkins cangku]# ls
    file1.txt
    
    • 1
    • 2
    • 3
    • 将文件提交到暂存区
    [root@jenkins cangku]# git add file1.txt
    [root@jenkins cangku]# git status
    # On branch master
    #
    # Initial commit
    #
    # Changes to be committed:
    #   (use "git rm --cached ..." to unstage)
    #
    #	new file:   file1.txt
    #
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    状态内容为:暂存区有一个新文件,如果你想取消提交可以执行那条命令。

    • 将文件从暂存区提交到本地仓库
    [root@jenkins cangku]# git commit -m "第一次提交 --v1"
    
    *** Please tell me who you are.
    
    Run
    
      git config --global user.email "you@example.com"
      git config --global user.name "Your Name"
    
    to set your account's default identity.
    Omit --global to set the identity only in this repository.
    
    fatal: unable to auto-detect email address (got 'root@jenkins.(none)')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    会发生报错,会让你配置邮箱和你是谁:将邮箱和名称替换成你自己的。

    git config --global user.email "you@example.com"
    git config --global user.name "Your Name"
    
    • 1
    • 2

    重新提交文件:

    [root@jenkins cangku]# git commit -m "第一次提交 --v1"
    [master (root-commit) d8c043e] 第一次提交 --v1
     1 file changed, 1 insertion(+)
     create mode 100644 file1.txt
    
    • 1
    • 2
    • 3
    • 4
    • 通过git log查看你的提交情况
    [root@jenkins cangku]# git log
    commit d8c043eda453085620ce8bcc6a3d27ca0d16f34e
    Author: Your Name >
    Date:   Tue Aug 1 17:37:42 2023 +0800
    
        第一次提交 --v1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    分别记录了代码提交ID,提交人和时间。

    3.3.代码回退

    • 重新创建一次提交,定为v2
    [root@jenkins cangku]# echo "hello world" >> file1.txt 
    [root@jenkins cangku]# git add .
    [root@jenkins cangku]# git commit -m "第二次提交 --v2"
    [master 7ed5fa3] 第二次提交 --v2
     1 file changed, 1 insertion(+)
    [root@jenkins cangku]# git log
    commit 7ed5fa310d081176f57661969d4b8b21a718c477
    Author: Your Name >
    Date:   Tue Aug 1 17:45:28 2023 +0800
    
        第二次提交 --v2
    
    commit d8c043eda453085620ce8bcc6a3d27ca0d16f34e
    Author: Your Name >
    Date:   Tue Aug 1 17:37:42 2023 +0800
    
        第一次提交 --v1
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 文件内容
    [root@jenkins cangku]# cat file1.txt 
    hello git
    hello world
    
    • 1
    • 2
    • 3
    • 执行回退操作
    [root@jenkins cangku]# git reset --hard d8c043eda
    HEAD is now at d8c043e 第一次提交 --v1
    
    • 1
    • 2

    回退到哪个版本输入哪个版本的id

    • 查看文件内容
    [root@jenkins cangku]# cat file1.txt 
    hello git
    
    • 1
    • 2

    3.4.代码恢复

    回退过去的代码我又想恢复过来怎么办?

    • 查看历史版本记录
    [root@jenkins cangku]# git reflog 
    d8c043e HEAD@{0}: reset: moving to d8c043eda
    2e26871 HEAD@{1}: commit: 第三次提交 -v3
    7ed5fa3 HEAD@{2}: commit: 第二次提交 --v2
    d8c043e HEAD@{3}: commit (initial): 第一次提交 --v1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 恢复到v3版本
    [root@jenkins cangku]# git reset --hard 2e26871
    HEAD is now at 2e26871 第三次提交 -v3
    
    • 1
    • 2
    • 查看文件
    [root@jenkins cangku]# cat file1.txt 
    hello git
    hello world
    hello
    
    • 1
    • 2
    • 3
    • 4

    已经恢复到v3版本

    4.分支


    Git分支是一个版本控制机制中的概念,它允许你在同一个代码库中并行开发多个代码线路。

    分支通常用于分离出不同的开发线,如稳定版、开发版、实验版等,或者为特定功能创建独立的开发线路。

    4.1.创建分支

    • 查看当前分支
    [root@jenkins cangku]# git branch 
    * master
    
    • 1
    • 2
    • 创建新分支dev
    [root@jenkins cangku]# git branch dev
    [root@jenkins cangku]# git branch
      dev
    * master
    
    • 1
    • 2
    • 3
    • 4
    • 切换分支到dev
    [root@jenkins cangku]# git checkout dev 
    Switched to branch 'dev'
    [root@jenkins cangku]# git branch 
    * dev
      master
    
    • 1
    • 2
    • 3
    • 4
    • 5

    4.2.在分支上提交任务


    创建分支时会将之前代码也创建到新分支上

    • 创建一个新文件
    [root@jenkins cangku]# vim hehe.py
    [root@jenkins cangku]# cat hehe.py 
    第一次呵呵呵
    
    • 1
    • 2
    • 3
    • 提交此文件到版本库
    [root@jenkins cangku]# git add .
    [root@jenkins cangku]# git commit -m "第一次呵呵呵 -v1"
    [dev 750ec9f] 第一次呵呵呵 -v1
     1 file changed, 1 insertion(+)
     create mode 100644 hehe.py
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 将文件加新内容后第二次提交
    [root@jenkins cangku]# echo "第二次呵呵呵" >> hehe.py 
    [root@jenkins cangku]# git add .
    [root@jenkins cangku]# git commit -m "第二次呵呵呵 -v2"
    [dev 3d8cb2a] 第二次呵呵呵 -v2
     1 file changed, 1 insertion(+)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 回到主分区会发现看不到dev分支内容
    [root@jenkins cangku]# git checkout master 
    Switched to branch 'master'
    [root@jenkins cangku]# ls
    file1.txt
    
    • 1
    • 2
    • 3
    • 4

    4.3.合并分支

    • 创建一个新分支test
    • 杂谈test分支上为file1.txt文件添加新内容(省略测试部分)
    • 回到master分支
    • test分支内容合并到master分支(需要先切到master分支)
    [root@jenkins cangku]# git branch
      dev
    * master
    
    [root@jenkins cangku]# git branch test
    
    [root@jenkins cangku]# git checkout test
    Switched to branch 'test'
    [root@jenkins cangku]# ls
    file1.txt
    
    [root@jenkins cangku]# echo "hello hehehe" >> file1.txt 
    [root@jenkins cangku]# git add .
    [root@jenkins cangku]# git commit -m "这是一次修复 -v1"
    [test 2fd525a] 这是一次修复 -v1
     1 file changed, 1 insertion(+)
     
    [root@jenkins cangku]# git checkout master 
    Switched to branch 'master'
           
    [root@jenkins cangku]# git merge test
    Updating 2e26871..2fd525a
    Fast-forward
     file1.txt | 1 +
     1 file changed, 1 insertion(+)
    
    [root@jenkins cangku]# cat file1.txt 
    hello git
    hello world
    hello
    hello hehehe
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 切换到dev分支
    • master分支合并到dev分支
    • (这里应该是测试,省略,假如测试成功)
    • 回到master分支
    • dev分支内容合并到master分支
    [root@jenkins cangku]# git checkout dev 
    Switched to branch 'dev'
    
    [root@jenkins cangku]# git merge master 
    Merge made by the 'recursive' strategy.
     file1.txt | 1 +
     1 file changed, 1 insertion(+)
     
    [root@jenkins cangku]# ls
    file1.txt  hehe.py
    
    [root@jenkins cangku]# git checkout master 
    Switched to branch 'master'
    [root@jenkins cangku]# ls
    file1.txt
    
    [root@jenkins cangku]# git merge dev
    Updating 2fd525a..0a18968
    Fast-forward
     hehe.py | 2 ++
     1 file changed, 2 insertions(+)
     create mode 100644 hehe.py
     
    [root@jenkins cangku]# cat file1.txt 
    hello git
    hello world
    hello
    hello hehehe
    [root@jenkins cangku]# cat hehe.py 
    第一次呵呵呵
    第二次呵呵呵
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    4.4.删除分支


    当一个分支使用完不需要了需要删除的时候可以使用以下命令

    • 删除分支
    [root@jenkins cangku]# git branch -d test
    Deleted branch test (was 2fd525a).
    [root@jenkins cangku]# git branch 
      dev
    * master
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 强制删除分支(分支未合并到主分支)
    [root@jenkins cangku]# git branch -D test
    
    • 1



    到此一个简单模拟的项目开发的流程结束!

  • 相关阅读:
    java 容器
    LVS-DR模式
    DeU-Net: 用于三维心脏mri视频分割的可变形(Deformable)U-Net
    计算机毕业设计(75)php小程序毕设作品之网上销售小程序商城系统
    昇腾AI与“紫东.太初”赋能法律服务,多模态大模型迈向“多专多能”
    介绍java中Pair和Map的区别
    nginx localtion使用正则匹配导致301 循环
    CMake引入三方库
    看起来是线程池的BUG,但是我认为是源码设计不合理。
    代码随想录 Day-45|#139 单词拆分
  • 原文地址:https://blog.csdn.net/qq_42527269/article/details/132046235