• Git使用教程


    01、Git简介

        Git 是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。 也是 Linus Torvalds 为了帮助管理Linux内核开发而开发的一个开放 源码 的版本控制软件。 Torvalds 开始着手开发 Git 是为了作为一种过渡方案来替代 BitKeeper。

        1.1、特点介绍

    分布式相比于集中式的最大区别在于开发者可以提交到本地,每个开发者通过克隆(git clone),在本地机器上拷贝一个完整的Git仓库。
    如图所示是经典的git开发过程。

    1.2、Git的功能特性

    从一般开发者的角度来看,git有以下功能:
    1、从服务器上克隆完整的Git仓库(包括代码和版本信息)到单机上。
    2、在自己的机器上根据不同的开发目的,创建分支,修改代码。
    3、在单机上自己创建的分支上提交代码。
    4、在单机上合并分支。
    5、把服务器上最新版的代码fetch下来,然后跟自己的主分支合并。
    6、生成补丁(patch),把补丁发送给主开发者。
    7、看主开发者的反馈,如果主开发者发现两个一般开发者之间有冲突(他们之间可以合作解决的冲突),就会要求他们先解决冲突,然后再由其中一个人提交。如果主开发者可以自己解决,或者没有冲突,就通过。
    8、一般开发者之间解决冲突的方法,开发者之间可以使用pull 命令解决冲突,解决完冲突之后再向主开发者提交补丁。
    从主开发者的角度(假设主开发者不用开发代码)看,git有以下功能:
    1、查看邮件或者通过其它方式查看一般开发者的提交状态。
    2、打上补丁,解决冲突(可以自己解决,也可以要求开发者之间解决以后再重新提交,如果是开源项目,还要决定哪些补丁有用,哪些不用)。
    3、向公共服务器提交结果,然后通知所有开发人员。

    优点:
         适合 分布式开发 ,强调个体。
        公共服务器压力和数据量都不会太大。
        速度快、灵活。
        任意两个开发者之间可以很容易的解决冲突。
         离线工作。
    缺点:
    资料少(起码中文资料很少)。
    学习周期相对而言比较长。
    不符合常规思维。
    代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。

    02、Git使用安装

    官网地址: Git    
        

        2.1、windows下载安装

        安装包下载完成之后双击,一直下一步。

        2.2、linux下载安装

    这里我就不介绍linux安装Git,大多数还是在windows上安装,如果需要可以百度一下。

    03、Git的常用命令

    3.1、常用命令

        3.1.1、克隆代码(下载代码)

                    git clone
        

        3.1.2、查看日志(查看提交记录)

                    git log 

        3.1.3、查看标签

                    git tag

        3.1.4、查看分支

                    git branch

        3.1.5、查看远程分支

                    git branch -a 

        3.1.6、拉取代码(更新代码)

                    git pull

        3.1.7、查看变更文件状态

                    git status

    3.2、新建代码

        3.2.1、在当前目录新建一个Git代码库

    git init
        

        3.2.2、 新建一个目录,将其初始化为Git代码库

    git init [project-name]
        

        3.2.3、 下载一个项目和它的整个代码历史

    git clone [url]

    3.3、配置

        3.3.1、 显示当前的Git配置

    git config --list
        

        3.3.2、 编辑Git配置文件

    git config -e [--global]
        

        3.3.3、 设置提交代码时的用户信息

    git config [--global] user.name "[name]"
    git config [--global] user.email "[email address]"

    3.4、增加/删除文件

        3.4.1、添加指定文件到暂存区

    git add [file1] [file2] ...
        

        3.4.2、 添加指定目录到暂存区,包括子目录

    git add [dir]
        

        3.4.3、 加当前目录的所有文件到暂存区

    git add .
        

        3.4.4、 删除工作区文件,并且将这次删除放入暂存区

    git rm [file1] [file2] ...
        

        3.4.5、 停止追踪指定文件,但该文件会保留在工作区

    git rm --cached [file]
        

        3.4.6、 改名文件,并且将这个改名放入暂存区

    git mv [file-original] [file-renamed]

    3.5、提交代码

        3.5.1、 提交暂存区到仓库区

    git commit -m [message]
        

        3.5.2、 提交暂存区的指定文件到仓库区

    git commit [file1] [file2] ... -m [message]
        

        3.5.3、 提交工作区自上次commit之后的变化,直接到仓库区

    git commit -a
        

        3.5.4、 提交时显示所有diff信息

    git commit -v
        

        3.5.5、使用一次新的commit,替代上一次提交,如果代码没有任何新变化,则用来改写上一次commit的提交信息

    git commit --amend -m [message]
        

        3.5.6、 重做上一次commit,并包括指定文件的新变化

    git commit --amend   ...

    3.6、分支

        
        解释:
            branch-name / branch:分支名称
           
            

        3.6.1、 列出所有本地分支

    git branch
        

        3.6.2、 列出所有远程分支

    git branch -r
        

        3.6.3、 列出所有本地分支和远程分支

    git branch -a
        

        3.6.4、 新建一个分支,但依然停留在当前分支

    git branch [branch-name]
        

        3.6.5、 新建一个分支,并切换到该分支

    git checkout -b [branch]
        

        3.6.6、 新建一个分支,指向指定commit

    git branch [branch] [commit]
        

        3.6.7、 新建一个分支,与指定的远程分支建立追踪关系

    git branch --track [branch] [remote-branch]
        

        3.6.8、 切换到指定分支,并更新工作区

    git checkout [branch-name]
        

        3.6.9、 建立追踪关系,在现有分支与指定的远程分支之间

    git branch --set-upstream [branch] [remote-branch]
        

        3.6.10、 合并指定分支到当前分支

    git merge [branch]
        

        3.6.11、 选择一个commit,合并进当前分支

    git cherry-pick [commit]
        

        3.6.12、 删除分支

    git branch -d [branch-name]
        

        3.6.13、 删除远程分支

    git push origin --delete
    git branch -dr

    3.7、标签

        3.7.1、 列出所有tag

    git tag
        

        3.7.2、 新建一个tag在当前commit

    git tag [tag]
        

        3.7.3、 新建一个tag在指定commit

    git tag [tag] [commit]
        

        3.7.4、 查看tag信息

    git show [tag]
        

        3.7.5、 提交指定tag

    git push [remote] [tag]
        

        3.7.6、 提交所有tag

    git push [remote] --tags
        

        3.7.7、 新建一个分支,指向某个tag

    git checkout -b [branch] [tag]

    3.8、查看

        3.8.1、 显示有变更的文件

    git status
        

        3.8.2、 显示当前分支的版本历史

    git log
        

        3.8.3、 显示commit历史,以及每次commit发生变更的文件

    git log --stat
        

        3.8.4、 显示某个文件的版本历史,包括文件改名

    git log --follow [file]
    git whatchanged [file]
        

        3.8.5、 显示指定文件相关的每一次diff

    git log -p [file]
        

        3.8.6、 显示指定文件是什么人在什么时间修改过

    git blame [file]
        

        3.8.7、 显示暂存区和工作区的差异

    git diff
        

        3.8.8、 显示暂存区和上一个commit的差异

    git diff --cached []
        

        3.8.9、 显示工作区与当前分支最新commit之间的差异

    git diff HEAD
        

        3.8.10、 显示两次提交之间的差异

    git diff [first-branch]...[second-branch]
        

        3.8.11、 显示某次提交的元数据和内容变化

    git show [commit]
        

        3.8.12、 显示某次提交发生变化的文件

    git show --name-only [commit]
        

        3.8.13、 显示某次提交时,某个文件的内容

    git show [commit]:[filename]
        

        3.8.14、 显示当前分支的最近几次提交

    git reflog

    3.9、远程同步

        3.9.1、 下载远程仓库的所有变动

    git fetch [remote]
        

        3.9.2、 显示所有远程仓库

    git remote -v
        

        3.9.3、 显示某个远程仓库的信息

    git remote show [remote]
        

        3.9.4、 增加一个新的远程仓库,并命名

    git remote add [shortname] [url]
        

        3.9.5、 取回远程仓库的变化,并与本地分支合并

    git pull [remote] [branch]
        

        3.9.6、 上传本地指定分支到远程仓库

    git push [remote] [branch]
        

        3.9.7、 强行推送当前分支到远程仓库,即使有冲突

    git push [remote] --force
        

        3.9.8、 推送所有分支到远程仓库

    git push [remote] --all
        

        3.9.9、 恢复暂存区的指定文件到工作区

    git checkout [file]
        

        3.9.10、 恢复某个commit的指定文件到工作区

    git checkout [commit] [file]
        

        3.9.11、 恢复上一个commit的所有文件到工作区

    git checkout .
        

        3.9.12、 重置暂存区的指定文件,与上一次commit保持一致,但工作区不变

    git reset [file]
        

        3.9.13、 重置暂存区与工作区,与上一次commit保持一致

    git reset --hard
        

        3.9.14、 重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变

    git reset [commit]
        

        3.9.15、 重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致

    git reset --hard [commit]
        

        3.9.16、 重置当前HEAD为指定commit,但保持暂存区和工作区不变

    git reset --keep [commit]
        

        3.9.17、 新建一个commit,用来撤销指定commit,后者的所有变化都将被前者抵消,并且应用到当前分支

    git revert [commit]

    3.10、其他

        3.10.1、 生成一个可供发布的压缩包

    git archive
        

        3.10.2、 备份当前工作区的内容

    git stash
        

        3.10.3、 从Git栈中读取最近一次保存的内容,恢复工作区的相关内容

    git stash pop
        

        3.10.4、 显示Git栈内的所有备份

    git stash list
        

        3.10.5、 清空Git栈

    git stash clear

    04、Git实践

        windows开发环境安装git工具之后,在git工具窗口是支持linux命令,所以我们可以如果想上传哪个目录的文件,可以进入哪个目录进行提交,但是要注意需要在打开工程目录的子目录里操作。

        4.1、登录Git账号

    git config --global user.name "账号"
    git config --global user.email "邮箱"

        4.2、如果使用的是gitee,拉取代码的时候会弹框让你登录你的gitee账号和密码

        4.3、查看登录的账号

    git config user.name

    05、总结

        5.1、工作区,暂存区,版本区

    • 工作区:就是你在电脑里能看到的目录。
    • 暂存区:英文叫 stage 或 index。一般存放在  .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
    • 版本库:工作区有一个隐藏目录  .git,这个不算工作区,而是 Git 的版本库。
    下面这个图展示了工作区、版本库中的暂存区和版本库之间的关系:
    • 图中左侧为工作区,右侧为版本库。在版本库中标记为 "index" 的区域是暂存区(stage/index),标记为 "master" 的是 master 分支所代表的目录树。
    • 图中我们可以看出此时 "HEAD" 实际是指向 master 分支的一个"游标"。所以图示的命令中出现 HEAD 的地方可以用 master 来替换。
    • 图中的 objects 标识的区域为 Git 的对象库,实际位于 ".git/objects" 目录下,里面包含了创建的各种对象及内容。
    • 当对工作区修改(或新增)的文件执行  git add 命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。
    • 当执行提交操作(git commit)时,暂存区的目录树写到版本库(对象库)中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。
    • 当执行  git reset HEAD 命令时,暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响。
    • 当执行  git rm --cached  命令时,会直接从暂存区删除文件,工作区则不做出改变。
    • 当执行  git checkout . 或者  git checkout --  命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区中的改动。
    • 当执行  git checkout HEAD . 或者  git checkout HEAD  命令时,会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。
  • 相关阅读:
    数据分析工具Polars实现CSV读写、排序、应用函数、lazy API
    鞋服零售企业如何进行数字化运营
    美创科技8个医疗数据安全场景化方案推出!
    真题磨练-20220903美团笔试算法反思学习(持续更新中)
    Linux应用编程概念
    代驾APP_第一章_项目环境搭建_第二节
    基于51单片机多路DTH11温湿度检测控制系统
    redis内存描述
    ZigBee 3.0理论教程-通用-1-13:建网与组网
    百战RHCE(第四十六战:运维工程师必会技-Ansible学习1-基础知识讲解)
  • 原文地址:https://blog.csdn.net/weixin_51689532/article/details/133785844