• GIT版本控制工具


    一、GIT介绍

     

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

    Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

    Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。

    1、git的三个区域

    • 工作区
    • 暂存区
    • 历史区

    2、文件的三种状态

    对于任何一个文件,在 Git 内都只有三种状态:

    • 已修改(modified)    --> Git 的工作目录
    • 已暂存(staged)       -->暂存区域
    • 已提交(committed) -->本地仓库

    已修改表示修改了某个文件,但还没有提交保存;

    已暂存表示把已修改的文件放在下次提交时要保存的清单中。

    已提交表示该文件已经被安全地保存在本地数据库中了;

    由此我们看到 Git 管理项目时,文件流转的三个工作区域:Git 的工作目录,暂存区域,以及本地仓库。

    二、下载安装

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

    三、GIT仓库的全局配置

    第一次安装完成git后,我们在全局环境下配置基本信息:我是谁

    $ git config -l 查看配置信息
    $ git config --globla -l 查看全局配置信息
    
    配置全局信息:用户名和邮箱
    $ git config --global user.name 'xxx'
    $ git config --global user.email 'xxx@xx.xx'

    四、创建仓库完成版本控制(本地)

    1、创建本地仓库

    创建一个仓库文件夹,鼠标右键选择git Bash Here
    $ git init
    //=>会生成一个隐藏的文件夹".git" (这个文件夹千万不要删除,因为暂存区和历史区还有一些其他的信息都在这里,删了就不是一个完整的git仓库了)

    2、将本地代码提交到暂存区

    在本地编写完成代码后(在工作区),把一些文件提交到暂存区

    $ git add xxx   把某一个文件或文件夹提交到暂存区
    $ git add . 或 -A 把当前仓库中所有最新修改的文件都提交到暂存区
    $ git status  查看当前文件的状态(红色代表在工作区/绿色代表在暂存区/看不见东西证明所有修改的信息都已经提交到历史区)

    当前文件状态

    3、把暂存区代码提交到历史区

    $ git commit -m'描述信息:本次提交内容的一个描述'  【不加空格写描述信息】
    查看历史版本信息
    $ git log 查看提交记录
    $ git reflog  包含回滚信息

    注意:从工作区提交到暂存区,从暂存区提交到历史区,是把内容赋值一份传过去的,本区域中依然存在这些信息,只有这样才能对比出哪些文件在某个区

    提交记录

    4、历史版本回滚

    根据历史版本号进行代码回滚
    $ git reset --hard d4970cc 【取版本号的前7位】

    五、GIT-HUB实现多人协同开发

    GitHub相当于中央服务器

    注册/登录:https://github.com/

    1、本地仓库与远程仓库的代码拉取与推送

    远程仓库地址

    1//建立本地仓库和远程仓库的连接
        查看本地仓库和哪些远程仓库保持链接
        $ git remote -v
        让本地仓库和远程仓库新建一个链接[origin是随便起的一个链接名,一般都叫origin]
        $ git remote add origin [GIT远程仓库地址]
    2//删除链接
        $ git remote rm origin

    注意:想要将本地的代码推送至远程仓库,本地的代码必须在历史区【只有历史区的代码才能推送至远程仓库】

    // 每次提交之前最好先将远程仓库的代码拉取到本地[别人有可能修改了代码]合并代码的作用
    $ git pull origin master
    
    // 将本地代码推送至GitHub(需要输入GitHub用户名和密码)
    $ git push origin master
    
    // 将GitHub仓库克隆到本地
    $ git clone [远程仓库git地址] [别名:可以不写,默认仓库名]
    $ git clone https://github.com/songzhixue1993/201908.git

    2、真实开发的项目流程

    /*
     * 真实项目开发流程
     *     1、组长或负责人先创建中央仓库[增加协作者]
     *     2、小组成员基于$ git clone 把远程仓库及默认的内容克隆到本地一份
     *        解决了三件事情
                 * 初始化了一个本地仓库[$ git init]
                 * 和对应的远程仓库保持了关联[$ git remote add]
                 * 把远程仓库默认内容拉取到了本地[$ git pull]
     * 3、每个组员写完自己的程序后,基于"git add/git commit"把自己修改的内容存在到历史区,然后通过"git pull/git push"把本地信息和远程仓库信息保持同步即可[可能涉及到冲突的处理]
     */

    六、常用命令

    git diff           # 对比工作区和本地仓库
    git diff --cached # 对比缓存区和本地仓库
    git log           # 查看当前版本之前所有的提交记录
    git reflog        # 查看所有的提交记录
    git log -n 2      # 显示最近几条数据
    git log -p        # 对比每提交的差异
    git log --format="%an:%ae:%s" # 自定义输出格式
    git reset --hard 版本号        # 回滚到指定版本
    git chekout --file            # 将文件回滚到最近的一次提交 
    git status                    # 查看状态
    git reset HEAD file           # 将指定的文件从缓存区拉取到工作区
    
    
    
    # 工作区必须有变动
    # 保存开发状态
    git stash  # 快照
    git stash pop # 恢复并删除快照
    git stash list # 查看所有快照
    git stash apply stash{id} # 恢复指定快照
    git stash drop # 删除快照
    
    
    git branch  # 查看分支
    git branch dev # 创建dev分支
    git checkout dev # 切换到dev分支
    git branch -d dev # 删除分支
    git checkout -b dev1 # 创建分支并切换分支
    
    # 合并分支,在合并到的分支上执行
    git merge dev  # 在master主分支上执行,(将dev的代码合并到master)
    
    # 冲突
    # 不同的分支在对同一行代码进行修改,在代码合并时会发生冲突
    """
    1、合并时间不能太长,一般2-3天合并一次
    2、完成一个小功能合并一次
    3、合并的时候所有人都要在
    """
    
    # 克隆分支
    git checkout -b dev origin/dev [指定以origin/dev为模板创建一个分支]
    
    # 删除远程仓库的分支
    git checkout --delete origin
    
    # tag
    git tag  # 查看标签
    git tag -a name -m '提交信息'
    git tag -a name -m '提交信息' hash值 # 以哈希值为模板创建一个标签tag
    git tag -d name   # 删除本地tag
    git push origin :refs/tags/v0.5  # 删除远程仓木的tag(给远程仓库推送了一个空的tag)
    
    
    # 忽略文件
    # 把不想上传的文件写在.gitignore文件中
    vim .gitignore
        - db.py
    
    # rebase
    变基 将提交记录变成一条直线
    
    # 切换git用户
    git config --global --unset user.name "xxx"
    git config --global --unset user.email "xxx"
  • 相关阅读:
    windows下面Nginx日志切割
    C#通过DocX创建word
    leetcode 189 Rotate Array
    leetcode 172 Factorial Trailing Zeroes
    leetcode 169 Majority Element 冰山查询
    leetcode 165 Compare Version Numbers
    leetcode 160 Intersection of Two Linked Lists
    【windows-》linux】SCP
    【设计】B端和C端区别
    【Flask】部署
  • 原文地址:https://www.cnblogs.com/songzhixue/p/11414873.html
Copyright © 2020-2023  润新知