zoukankan      html  css  js  c++  java
  • Git 常用操作(一)

    一、Git 简介

    "版本控制系统"(Version Control System,VCS)是程序代码管理软件的通称,是用来保存程序文件的修改记录以及历史版本,以便日后查看或是使用。VCS早期的系统是采用集中管理和控制的方式,比如 SVN。新的 VCS 改成采用分布式的方式,比如 Git。当前市场上占有率最高的 VCS 有两套:Subversion(简称 SVN )和 Git。现在越来越多的软件公司开始使用Git管理程序项目,网络上也有专门提供 Git Server 服务的网站,像是 GitHub 和 GitLab。

    Git 的开发者其实就是 Linux 的作者 Linus Torvalds,Git 是免费、开源的,最初 Linux 内核开发使用 Bitkeeper 管理代码,此时 Bitkeeper 是免费的,后来却要收费,因此 Torvalds 打造出自己的VCS 工具 Git 用来替代 BitKeeper。

    二、集中式和分布式

    集中式是指只有一个远程版本库,而分布式有本地和远程版本库。

    方便性:SVN 是集中式版本控制系统,版本库是集中放在中央服务器的,拉代码的时候需要联网从中央服务器哪里得到最新的版本,提交代码也同样。集中式版本控制系统是必须联网才能工作;Git 是分布式版本控制系统,它没有中央服务器的,每个人的电脑就是一个完整的版本库。工作的时候就不需要联网了,因为每个人的电脑都有一个完整的版本库。如果没有网络仍然能够提交文件,查看历史版本记录,创建项目分支;

    安全性:对于 SVN 来说,如果存储远程版本库的服务器挂了,所有人的代码都无法提交,甚至丢失版本库。而 Git 则因为有本地版本库而不会有这个问题。

    三、Git 的工作方式

    由上图可以看出,通常情况下,Git 的工作流程如下所示:

    (1)我们在工作区目录中添加、修改代码文件;

    (2)我们运行 git add . ,将工作区(workspace)的代码提交到了暂存区(index)中;

    (3)然后我们运行的 git commit -m "修改代码提交说明" 将暂存区中的代码提交到本地仓库(local Repository)中;

    (4)最后我们通过 git push 将本地仓库的代码推送到远程仓库(Remote Repository)了。

    四、Git 文件状态

    在 Git 中,文件的状态主要有如下几种:

    说明:

    (1)新建文件 ---> Untracked

    (2)使用 add 命令将新建的文件加入到暂存区 ---> Staged

    (3)使用 commit 命令将暂存区的文件提交到本地仓库 ---> Unmodified

    (4)如果对 Unmodified 状态的文件进行修改 ---> modified

    (5)如果对 Unmodified 状态的文件进行 rm 操作 ---> Untracked

    五、Git 常用命令

    Git 常用命令如下所示:

    # 创建文档库repository,即.git子文件夹
    git init
    
    # 指定dev分支-b dev,默认克隆master分支内容
    git clone -b dev https://xxxxxxx
    
    # 更新远程代码到本地工作区
    git pull
    
    # 显示当前Git的状态,查看我们当前工作区修改的文件状态
    git status
    
    # 比较当前工作区(即未提交到暂存区),与暂存区(即已经执行了git add)之间文件内容的不同,显示具体内容的修改变化(删除了红色行 ,新增了绿色行的代码)。其实此时运行的 git diff 相当于 git diff HEAD(HEAD 指向的是 local repository 中最新提交的版本)。
    git diff file_name
    
    # 把文件内容加入Git系统的索引,即暂存区
    git add file_name
    
    # 从暂存区将文件提交到本地仓库
    git commit -m 'commentxxxx'
    
    # 将本地仓库代码推送至远程仓库
    git push
    
    # 查看提交日志
    git log
    
    # 显示完整的辅助说明指令列表
    git help -a 
    
    # 显示init指定指令的说明信息
    git init -help
    
    # 使用图形化工具查看
    gitk

    5.1 Git 配置文件

    Git 有三个不同级别的配置文件,它们有不同的优先级,高优先权文件的设置项会覆盖低优先权文件中相同的设置项。以下按照优先权从高到低按序如下:

    (1)项目文件夹中 ".git" 子文件夹内的 config 文件

    这个配置文件具有最高的优先权,使用如下命令可以查看该配置文件的内容。

    git config --local -l

    (2)操作系统登录账号的 home directory 中的 .gitconfig 文件

    这个配置文件具有中等优先权,文件通常在 C:Usersmoonxy.gitconfig,使用如下命令可以查看该配置文件的内容。

    git config --global -l

    (3)Git 程序的安装文件中的 etcgitconfig 文件

    这个配置文件具有最低优先权,文件通常在 C:Program FilesGit-2.24.1etcgitconfig,使用如下命令可以查看该配置文件的内容。

    git config --system -l

    使用 git config -l 可以同时查看上面三个配置文件中的所有设置项。

    如下我们将操作者的姓名和 email 记录在文档库对应的配置文件中:

    git config user.name 'moonxy'
    git config user.email 'moonxy@qq.com'

    此处省略了 --local,默认设置在文档库的配置文件中,也可以添加 --global 和 --system 选项来设置在其他优先级的配置文件中。

    如果要删除文档库配置文件中的操作者姓名,可以执行如下命令:

    git config --unset user.name

    我们可以定义指定的别名(alias),也就是用简短的缩写来表示标准的命令,如下:

    # git config alias.指令别名 '正式的指令和选项'
    git config alias.cfg 'config -l'
    
    之后使用 git cfg 就表示 git config -l
    
    # 删除别名
    git config --unset alias.cfg

    修改默认的文本编辑器,比如从 nano 修改为 vim,命令如下:

    git config --global core.editor 'vim'

    修改文件对比程序,使用 git difftool 命令,在配置文件中指定自己习惯的文件对比程序,比如 KDiff3 或者 WinMerge,如下:

    git config --global diff.tool kdiff3
    
    git config --global difftool.kdiff3.cmd 
    "'C:Program FilesKDiff3kdiff3.exe' "$LOCAL" "$REMOTE""
    
    git config --global difftool.prompt false

    设置好之后再次执行 git difftool 指令,就会启动 KDiff3 程序,并且显示文件对比的结果。

    5.2 把文件存入 Git 文档库

    使用 .gitignore 文件排除不需要加入文档库的文件

    在 .gitignore 文件中可以用 "#" 字符开头表示注释,文件夹路径是由 "/" 字符,文件名可以使用通配符 "*"。另外还可以使用 "!" 字符表示排除,例如以下设置表示要忽略所有扩展名为 txt 的文件,但是不包含 note.txt:

    *.txt
    # 设置不要忽略 note.txt 文件
    !note.txt

    控制 Commit

    "git rm" 指令用来删除文档库中的文件或是 Git 索引(暂存区)中的文件,也可以删除工作区中的文件。如下:

    git rm 文件名

    如果执行 "git rm" 时加入 "--cached" 选项如下:

    git rm --cached 文件名

    表示删除文档库中的文件或是 Git 索引(暂存区)中的文件,但是保留了本地工作区的这个文件,只是不希望这个文件被版本控制。

    Commit 节点

    gitk 指令启动图形查看模式后,窗口下方的 "SHA1 ID" 字段就会显示该节点的标识符,也可以使用 "git log" 指令达到相同的目的,如果加上 "--graph" 选项,会用文本模式排列出 commit 节点的演进图,如果搭配 "--oneline" 选项,可以用最简便的方式显示。

    git log --oneline

    Git 还提供一个叫作 HEAD 的节点标签,这个节点标签可以简写成 "@",这个节点标签永远代表最新的 commit,比如执行如下的指令,显示最新 commit 的详细数据:

    git show HEAD

    要指定某一个节点之前的节点可以使用以下格式:

    节点标签或者标识符^数字
    节点标签或者标识符~数字

    其中 "^" 用来指定是哪一个父节点,"~" 用来表示哪一层的父节点。

    如果要显示指定的 commit 节点中特定文件的内容,可以使用 "git show" 命令,格式如下:

    git show [commit id]:文件名

    commit 节点的标识符是一组很长的16进制数字,一般只要使用最前面4个数字,Git 会自动找出对应的节点。

    除了 Git 内置的 HEAD 节点标签之外,我们可以给 commit 节点贴上自定的标签,"git tag" 指令格式如下:

    # 自定义标签
    git tag 自定义的标签名称 commit节点标识符或者标签
    
    # 删除标签
    git tag -d commit 节点标签

    让文档库恢复到某一个节点的状态,即用于回退版本,可以指定退回到某一次提交的版本,"git reset" 指令格式如下:

    git reset 选项 commit节点标识符或者标签

    其中选项如果是 "--soft",表示只有文档库里面的数据会该表,Git 索引和工作区中的文件都不会受到影响;如果选项是 "--mixed"(这是默认选项),表示 Git 索引也会恢复到指定节点的状态,但是工作区中的的文件仍然不会受到影响;如果选项是 "--hard",则文档库、Git 索引和工作区中的文件,都会恢复到指定节点的状态。

    从 Git 文档库中取出文件

    我们可以从文档库中任何一个 commit 节点取出指定的文件:

    git checkout [commit节点标识符或标签] 文件名1 文件名2

    改变文件或者文件夹的名称

    有时候我们需要更改文件夹中的文件名,然后把它记录在Git 索引中,接着只要执行 "git commit" 指令,就可以更新文档库。

    git mv 原来的文件名或文件夹名 新的文件名或文件夹名

    注意:

    "git add ." 指令会把新增的文件和被修改的文件加入 Git 索引,但是被删除的文件不会记录在 Git 索引中。

    "git add -u" 指令会把修改的文件和被删除的文件加入 Git 索引,但是新增的文件不会加入 Git 索引中。

    "git add -A" 指令会把新增的文件、被修改的文件以及被删除的文件全部加入 Git 索引中。

    参考资料:

    一个小时学会Git

    【Git】(1)---工作区、暂存区、版本库、远程仓库

  • 相关阅读:
    Spring Boot2 系列教程(二十)Spring Boot 整合JdbcTemplate 多数据源
    Spring Boot 如何给微信公众号返回消息
    Spring Boot2 系列教程(十九)Spring Boot 整合 JdbcTemplate
    Spring Boot2 系列教程(十八)Spring Boot 中自定义 SpringMVC 配置
    Spring Boot 开发微信公众号后台
    Spring Boot2 系列教程(十七)SpringBoot 整合 Swagger2
    Spring Boot2 系列教程(十六)定时任务的两种实现方式
    Spring Boot2 系列教程(十五)定义系统启动任务的两种方式
    Spring Boot2 系列教程(十四)CORS 解决跨域问题
    JavaScript二维数组
  • 原文地址:https://www.cnblogs.com/cnjavahome/p/14035440.html
Copyright © 2011-2022 走看看