Git由浅入深,一文搞定!!!

一、开发使用场景

  1. 备份:防止电脑突然宕机此类情况发生,导致代码原地消失,在Git上进行备份处理

  2. 代码还原:在代码开发过程,根据需求修修改改,导致代码面目全非,这时候怀念“她”那时“一袭白裙”站在你面前的样子。使用Git回到曾经!

  3. 协同开发:在工作中,一个强大的功能需要多位优秀的程序员共同开发,Git 的分支功能允许团队成员同时在不同的分支上进行独立的开发工作,互不干扰。例如,前端团队可以在 feature - front - end 分支上开发新的用户界面,后端团队在 feature - back - end 分支上实现新的业务逻辑,两个团队可以并行推进工作,大大提高了开发效率。

  4. 追溯问题代码的编写人和编写时间:根据代码版本号更好的追溯到代码编写程序员,方便查清问题代码编写人。

二、版本控制器的方式

2.1 集中式版本控制器(Centralized Version Control System,CVCS)

概念:以一个中央服务器为核心,服务器中存储项目的所有版本信息和代码历史。团队成员需要从中央服务器获取最新的代码副本到本地进行开发,开发完成后将修改的代码提交回中央服务器。所有的版本控制操作(交互、更新、哈看历史记录)都依赖于与中央服务器的交互。

优点易于管理,所有的版本信息都集中在中央服务器。能保证项目代码一致性历史记录清晰

缺点依赖网络单点故障风险并发冲突复杂,当多个成员同时对同一文件进行修改并且提交时,容易产生冲突。

常见工具:Subversion(SVN),Perforce。

2.2 分布式版本控制工具(Distributed Version Control System,DVCS)

概念:没有中央服务器来存储所有的版本信息,每个开发者的本地计算机都是一个完整的版本库,包含着项目的完整历史记录和所有的版本信息。开发者直接可以直接进行数据交互,不需要通过中央服务器。每个节点都可以作为独立的版本控制中心,具备完整的版本控制功能。

优点无需依赖网络,在网络情况也可以进行开发,在有网络的时候再进行推送和拉取。数据安全与冗余,数据可以在任何一个节点恢复。高效的分支管理

缺点学习曲线较陡存在数据一致性挑战,分布式版本控制工具提供了合并和解决冲突的机制,但多个开发者对同一文件的同一部分进行修改时,可能会产生复杂的合并冲突,需要手动解决。

常见工具:Git,Mercurial(python常用),Bazaar。

2.3 SVN 与 Git

  1. Git是分布式的,SVN不是。(最核心的区别)

  2. Git把内容按元数据方式存储,而SVN是按文件:Git使用对象存储机制,SVN以文件和目录的形式存储数据。所有的资源控制系统都是把文件的元信息隐藏在一个类似 .svn、.cvs等的文件夹里。

  3. Git分支和SVN分支不同:在Git中分支是轻量级指针操作。在SVN中是目录拷贝,可能耗时和占空间。

  4. Git没有一个全局的版本号,而SVN有。

  5. Git的内容完整性要优于SVN。

三、Git的常用命令

Workspace —— 工作区

Index / Stage —— 暂存区

Repository —— 仓库区(或本地仓库)

Remote —— 远程仓库

3.1 Git工作流程

3.2 获取本地仓库

要使用Git对代码进行版本控制,首先要获取本地仓库

  1. 在本地创建一个空目录,作为我们的本地Git仓库

  2. 在该目录下进入Git Bash窗口

    1. 执行命令 git init,初始化当前目录为一个git仓库

    2. 如果创建成功,在文件夹下可以看到隐藏的 .git 目录

    3.3 基础操作命令

    1. git config:通过git config配置用户名和邮箱地址,便于代码提交远程仓库,格式如下:

      git config --global user.name 'userName'
      git config --global user.email 'userEmail'
      1. git add:将文件从工作区(workspace)添加到暂存区(index)

        //添加所有文件
        git add .
        
        //添加某一类指定文件
        git add *.java
        
        //添加指定文件
        git add test.txt
        1. git commit:将暂存区(index)的内容添加到仓库(repository)中,可以在后面加上-m,在命令行中提交注释。

          //正常就行commit
          git commit -m "firstCommit"
          
          //如果想要跳过commit前的add操作,可以直接使用-a选项
          git commit -am "firstAddAndCommit"
          1. git status:查看相关文件的状态,git status -s查看简写状态。

            //当您对Git的各种状态比较熟悉,就可以尝试使用git status -s来查看简写状态
            git status -s
            //M - 被修改
            //A - 被添加
            //D - 被删除
            //R - 重命名
            //?? - 未被跟踪
            1. git log:查看提交记录。常用命令形式:git log [option]。

              //显示所有的分支
              git log --all
              
              //将提交的信息显示为一行
              git log --pretty=oneline
              
              //使得输出的commit更简短
              git log --abbrev-commit
              
              //以图的形式显示
              git log --graph
              
              //查看已经删除的记录
              git relog
              1. git branch:查看当前分支。

                git branch         # 列出本地分支(当前分支前有*)
                git branch -r      # 列出远程分支
                git branch -a      # 列出所有分支(本地+远程)
              2. git reset:撤销暂存区文件

                git reset <文件名>  # 将指定文件从暂存区移除(保留工作区修改)
                git reset          # 撤销所有暂存区文件(保留工作区)
              3. git push:推送代码到远程仓库

                git push                # 推送本地当前分支到对应远程分支
                git push origin <本地分支名>  # 推送指定本地分支到远程(首次推送需指定)
                git push -u origin <分支名>   # 绑定本地与远程分支,后续可直接git push
                git push -f origin <分支名>  # 强制推送(常用于修正历史提交后)
              4. git reset --hard commitID:版本回退,commitID可以通过 git log 或 git relog 查看。

                git reset --hard         #彻底重置整个仓库(包括暂存区和工作区)
                git reset --hard <提交ID>  # 回退到指定提交(ID可通过git log获取)
                git reset --hard HEAD~1    # 回退到上一个提交(~1表示前1个,~2前2个,以此类推)
              5. git relog:查看操作记录,用于找回误删提交

                git reflog  # 显示本地仓库的所有操作记录(包括reset、commit等)
              6. git stash:暂存当前工作区修改

                git stash  # 将工作区和暂存区的修改暂存起来(回到干净状态)
                git stash list  # 显示所有暂存记录(格式:stash@{0}: 描述)
              7. git checkout:放弃当前工作区的修改

                git checkout -- <文件名>  # 放弃指定文件的工作区修改(恢复到暂存区/HEAD状态)
                git checkout -- .        # 放弃当前目录所有工作区修改,但是只会回复已经tracked的,新增的不会被删除
                git clean -fd      #删除所有未跟踪的目录与文件
              8. git diff:比较差异

                git diff          # 比较工作区与暂存区的差异
                git diff --staged # 比较暂存区与本地仓库(HEAD)的差异
                git diff <分支1> <分支2>  # 比较两个分支的差异
              9. 添加文件到忽略列表

                  在文件夹下部分文件不需要Git管理,我们不需要其总是出现在未跟踪文件列表,可以在工作目录中创建一个名为 .gitignore 的文件(文件名称固定),列出要忽略的文件模式。

                #用于输出git提交日志
                alias git-log='git log --pretty=oneline --all --graph --abbrev-commit'
                
                #用于输出当前目录所有文件及基本信息
                alias ll='ls -al'
                1. 为常用指令设置别名(选择性学习)

                    有些常用指令参数非常多,每次使用需要输入很多参数,我们可以使用给别名

                  1. 打开用户目录,创建 .bashrc 文件,部分系统可能遇到不允许用户创建点开头的文件,可以执行 touch ~/.bashrc

                  2. 在 .bashrc 中输入如下内容,或其他命令进行自定义

                  3.4 分支(Brabch)

                  Git分支管理能够让多个开发人员并行工作,开发新功能、修复bug或进行实验,且不会影像主代码库。一个分支代表一条独立的开发线。使用分支意味可以从开发主线上分离出来,然后不影响主线的同时继续工作。

                  Git分支实际上是指向提交对象的可变指针。有人把Git的分支模型称为必杀技特性,正是以为如此,才将Git从版本控制系统家族中区分出。

                  3.4.1 主线与功能分支的关系

                  在Git中新建一个项目后,默认一个分支,即为主分支。主分支一般代表项目的稳定版本,主分支包含没有Bug的代码,并且保持随时可以发布状态。对于小型项目来说,一个主分支即可。

                  暂时无法在飞书文档外展示此内容

                  结合以上命令,此处绘制图像搭配理解

                  • 只有一个主分支时,每次提交都会有一个commit点

                    • 创建名为 "a" 的新分支,并且切换到a分支

                      • 在a分支上创建两个提交

                        • 切换到master分支并且进行快速合并(Fast-forward),快速合并直接将master指向了a指向所提交的C5

                          • 非快速合并,在master创建合并提交节点

                            3.4.2操作分支常用命令

                            1. git branch:查看本地分支

                            2. git branch <new_branch_name>:创建本地分支

                            3. git checkout <branch_name>:切换分支

                            4. git merge <branch_name>:快速合并分支到另一个分支

                            5. git branch -d <branch_name>:删除分支时需要做各种检查

                            6. git branch -D <branch_name>:不做任何检查,强制删除

                            四、 Git远程仓库

                            4.1 常用的托管服务

                            在Git中存在两种类型的仓库,即为本地仓库和远程仓库。关于远程仓库我们可以通过互联网上提供的一些代码托管服务实现,例如:GitHub、码云(gitee)、GitLab等。

                            4.2 创建远程仓库

                            1. 登录 Gitee 账号

                              1. 浏览器访问 Gitee 官网 → 点击右上角「登录」→ 输入账号密码(或扫码登录)。

                            2. 新建仓库

                              1. 点击右上角「+」→ 选择「新建仓库」→ 填写以下信息:

                                • 仓库名称:建议英文命名(如 project-demo

                                • 可见性

                                  • 🔓 公开:所有人可见(适合开源项目)

                                  • 🔒 私有:仅团队成员可见(需提前在 Gitee 添加协作成员)

                                • 初始化选项建议不做改变

                                • 获取仓库地址

                            3. 常见问题

                              1. Q:SSH连接失败怎么办?A:检查~/.ssh/id_rsa.pub是否添加到Gitee [SSH公钥]

                            4.3 操作远程仓库

                            4.3.1 添加远程仓库

                            先初始化本地仓库,然后创建已创建的远程库进行对接

                            命令git remote add <远端名称><仓库路径>远端名称:通常是origin,取决于远端服务器设置。仓库路径:从远端服务器获取此URL。

                            :git remote add origingit@gitee.com:czbk_zhang_meng/git_test.git

                            4.3.2 查看远程仓库

                            命令:git remote

                            4.3.3 推送到远程仓库

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

                            例:git push origin master

                            • -f:表示强制覆盖

                            • --set-upstream:推送到远端的同时建立起和远端分支的关联分支

                            4.3.4 本地分支与远程分支的关联关系

                            命令:git branch -vv

                            4.3.5 从远程仓库克隆

                            命令:git clone <仓库路径> [本地目录]

                            本地目录可以省略,会自动生成一个目录

                            4.3.6 从远程仓库抓取和拉取

                            命令:git fetch [remote name] [branch name]

                            抓取是将仓库中的更新都抓取到本地,不会进行合并,如果没有指定远端名称和分支名,则抓取所有分支

                            命令:git pull [remote name] [branch name]

                            拉取是将仓库中的修改拉到本地并且进行自动合并,等同于fetch+merge,如果未指定,与上同理

                            评论
                            添加红包

                            请填写红包祝福语或标题

                            红包个数最小为10个

                            红包金额最低5元

                            当前余额3.43前往充值 >
                            需支付:10.00
                            成就一亿技术人!
                            领取后你会自动成为博主和红包主的粉丝 规则
                            hope_wisdom
                            发出的红包
                            实付
                            使用余额支付
                            点击重新获取
                            扫码支付
                            钱包余额 0

                            抵扣说明:

                            1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
                            2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

                            余额充值