• Linux下Git简单使用


    前言

    Git是一个分布式版本控制系统,用于高效的处理或大或小的项目,之前一直使用IDEA整合的Git,对Git的各种命令和原理不是很了解,所以来学习一下。
    Git的分布式体现在每台电脑上的Git都包含完整的版本库信息(如历史提交记录),有一个集中式的服务器如GitHub只是为了方便我们交换代码,实际上任意两个Git之间都是可以相互通信的。

    安装

    Linux下可以使用yum直接安装

    yum install git
    

    配置属性

    git config --system user.name 'szz'可以配置系统属性,当前操作系统所有用户有效
    git config --global user.name 'szz'可以配置全局属性,当前操作系统当前用户有效
    git config --local user.email 'szz@163.com'可以配置本地属性,当前操作系统当前用户当前仓库有效

    commit文件前需要先配置user.name和user.email两个属性

    各种概念

    一个受Git管理的文件有3种状态

    • 工作区,文件创建之后就在工作区,使用git add test1.txt命令将test1.txt文件添加到暂存区
    • 暂存区,使用git rm --cached test1.txt命令将test1.txt文件从暂存区清除,不影响工作区,
      使用git checkout -- test1.txt命令将暂存区的test1.txt文件替换工作区的test1.txt文件,很危险,会清除工作区那些未添加的改动。
      使用git reset HEAD test1.txt命令将暂存区test1.txt文件回退到上一次commit提交之后的版本(清除暂存区),不影响工作区。
      使用git commit -m '测试'命令将暂存区文件提交到版本库。
    • 版本库,使用git log查看commit记录,
      使用git reset --soft HEAD^回退到上次commit的版本

    常用命令

    git init初始化一个git仓库,会创建一个.git目录,包含该仓库的所有元数据,如暂存区数据等
    git status查看当前仓库(当前分支)的状态,如有哪些文件处于暂存区需要commit。
    git log查看提交记录(当前分支)
    git reflog查看操作记录(当前分支)
    git blame a.txt查看a.txt的修改记录
    git reset --mixed a.txt重置暂存区a.txt文件和最后一次commit保持一致(默认--mixed)。
    git reset --soft HEAD^重置版本库所有文件到最后一次commit(回退版本,不能回退指定文件,不影响暂存区和工作区文件,可以废弃之前有错误commit日志的commit)。
    git reset --hard HEAD^重置版本库所有文件到最后一次commit(回退版本,不能回退指定文件,工作区文件也回退,清除暂存区)。
    git reset --hard 04ae重置版本库所有文件到指定commit。
    git rm a.txt删除工作区和暂存区的a.txt文件(前提是a.txt已经存在版本库中),如果暂存区之前已经有修改过的a.txt,可以使用git rm --cached a.txt先删除暂存区的a.txt,或者使用
    git rm -f a.txt强制删除。
    git rmrm的区别,前一种不仅会删除,且会将这次删除操作添加到暂存区。
    如果使用git rm a.txt命令之后,又想不删了,可以先使用git reset HEAD a.txt将这次删除操作移除暂存区,再使用git checkout -- a.txt丢弃工作区的删除操作,就可以将a.txt恢复到工作区了。
    git diff a.txt比较暂存区和工作区a.txt文件的区别
    git diff HEAD a.txt比较最新commit和工作区a.txt文件的区别
    git diff --cached a.txt比较最新commit和暂存区a.txt文件的区别
    git diff master dev比较master分支和dev分支的区别
    git cherry-pcik [commitid]将指定的commit应用到当前分支(部分合并分支)

    配置.gitignore文件

    我们可以使用.gitignore文件来忽略不想提交的文件,如java项目中编译的class和IDE的配置信息等。

    *.txt  # 所有类型为txt的文件
    !a.txt # 不忽略a.txt
    b/     # b目录下所有文件
    b/**/c.txt  # b目录下所有层级下的c.txt文件
    

    分支管理

    使用分支可以让我们每个人独立于主线之外开发,互不影响。
    git branch查看所有分支
    git branch test1创建test1分支
    git branch -m test1 test2修改test1分支的名称为test2
    git checkout test1切换到test1分支
    git checkout -b test1创建test1分支并切换到test1分支
    git branch -d test1删除test1分支,如果test1分支有提交没有被合并,不能删除,可以强制删除或进行合并
    git branch -D test1删除test1分支,强制删除
    git merge test1将test1分支合并到当前分支上

    分支切换及合并的原理

    git会将所有的commit串成一条线,每个commit都有一个或多个(合并情况下)parent指针(指向上次的commit),HEAD指针指向当前分支(可以通过.git目录下HEAD文件查看),master指针指向master分支最新的commit。
    我们可以使用git log查看commit记录,使用git show --pretty=raw [commit id]查看一次commit的详细信息,包含它的parent指针。

    当我们创建了一个新的分支dev并且切换过去后,HEAD就指向了dev分支,dev指针也指向了最新的一次commit。

    我们在dev分支上做了新的commit后,dev指针向前移动一个,master指针不变。

    当我们想将dev分支合并到master分支上时,要先切换到master分支,HEAD指针就指向了master分支,合并之后master指针直接指向当前dev指针指向的commit。

    上面是没出现冲突的情况,如果出现了冲突,dev分支修改了a文件,master分支也修改了a文件,且都修改了同一行,将dev合并到master时就会冲突

    这种情况需要我们手动修改a文件解决冲突,然后再次commit,master指针就指向了新的commit(此commit有两个parent指针)。

    merge和rebase的区别

    假设当前在mywork分支,执行git merge origin可以将origin分支内容合并到当前分支,并生成一个新的commit

    执行git rebase origin,相当于将mywork的两次commit以补丁的形式合并到origin的最后一次commit上,会将原来的commit删除(C5,C6),创建新的commit(修改了历史commit,不建议使用)

    标签管理

    标签可以看做当前仓库当前分支最新commit时的一个快照
    git tag -l查询所有标签
    git tag -l 'v1.0'查询名称为v1.0的标签
    git tag -a v1.0 -m '版本1'创建名称为v1.0的标签,注释为版本1
    git tag -d v1.0删除名称为v1.0的标签

    远程仓库

    git clone [url]从远程git服务器克隆一个仓库到本地,后续可以直接push
    git remote add origin [url]添加一个远程仓库的关联,origin就是远程仓库的别名
    git remote -v查看当前仓库关联的远程仓库
    git remote show origin查看关联的远程仓库的信息
    git push origin master将本地的master分支推送到远程仓库的master分支
    git pull origin master将远程仓库的master分支拉取到本地的当前分支并合并,相当于git fetchgit merge origin/master两个命令的简写。
    在项目中,我们一般多人开发,张三修改了a.txt,commit之后,push到远程,李四也修改了本地的a.txt,push时会失败(因为和远程的有冲突),需要先pull,处理完冲突,再次push。
    git branch -a查看所有分支,包含远程分支
    git branch -r查看所有远程分支
    git push origin --delete test2删除远程的test2分支
    git push origin v1.0将本地的标签v1.0推送到远程
    git push origin --delete v1.0删除远程的v1.0标签
    git checkout -b dev origin/dev根据远程分支dev创建本地分支dev

    模块管理

    关于submodule,可以查看7.11 Git 工具 - 子模块
    关于subtree,可以查看用 Git Subtree 在多个 Git 项目间双向同步子项目,附简明使用手册

    总结

    理解了各种命令,也就理解了图形化工具各种功能的原理,如IDEA对git整合的各种操作。

    参考

    git-简明指南
    Git教程-菜鸟教程
    Git官网
    git分支开发的原理
    git rebase原理和使用

  • 相关阅读:
    soapUI学习笔记--用例字段参数化
    python 写数据到txt 文件
    Python生成8位随机字符串的一些方法
    python datetime获取几分钟、小时、天之前的时间
    MQTT 测试工具介绍
    运用MQTT-JMeter插件测试MQTT服务器性能
    mqtt-jmeter
    ActiveMQ测试工具
    MQTT压力测试工具之JMeter插件教程
    volatile非原子性的示例
  • 原文地址:https://www.cnblogs.com/strongmore/p/16180198.html
Copyright © 2020-2023  润新知