【工具篇-Git】Git配置管理工具

【工具篇-Git】Git配置管理工具

一、入门

1. 简介

Git

Git是一个分布式版本管理系统(VCS),最早由Linux之父Linus使用C语言开发,主要有以下四个概念:

  • Workspace:工作区,即工作目录
  • Index / Stage:暂存区,指.git目录下的index文件
  • Repository:仓库区或本地仓库,就是工作目录下的隐藏目录.git
  • Remote:远程仓库,一般是代码托管平台上或服务器上搭建的的仓库

2. 安装

  1. 查看git
    命令行输入git查看是否已安装git

  2. 安装git

    • Windows/Mac
      在Git官网下载安装程序,然后按照提示安装即可

    • Linux
      命令行输入:

        sudo apt-get install git   
      

3. 配置

命令行输入:

git config --global user.name <user-name>  
git config --global user.email <user-email>  

其中,<user-name>是用户名,<user-email>是用户邮箱

  • 说明
    • --system参数将配置应用于所有用户
    • --global参数将配置应用于本用户
    • --local参数将配置应用于本仓库

4. git入门示例

  1. 创建仓库

    1. 新建空目录gitdemo,并进入到gitdemo
    2. 命令行输入git init命令初始化仓库。这时该目录下会多出一个.git隐藏目录
  2. 编辑文件
    在gitdemo(或其子目录)下新建文本文档readme.txt,内容如下:

    Git is a distributed version control system.
    Git is free software distributed under the GPL.
    
  3. 添加到仓库

    1. 命令行输入如下命令把工作区中的内容添加到暂存区

      git add readme.txt  
      
    2. 命令行输入如下命令把暂存区中的内容提交到版本库

      git commit readme.txt -m "the first commit"    
      

二、版本管理

1. 创建仓库

  1. 进入已有目录或新建空目录(推荐)并进入
  2. 使用git init命令初始化仓库
    注意
    git只能跟踪文本文件的变化,例如.txt, .html, .java等;对于二进制文件,只能进行管理,无法跟踪变化,例如.docx, .img等

2. 添加到仓库

  1. 使用git add <file>命令把工作区中文件<file>变化添加到暂存区

  2. 使用git commit <file> -m <comment>命令把暂存区中的内容提交到版本库,其中,-m 参数和后面的说明<comment>可以省略,但为了查找方便,建议添加说明,例如:

    git commit -m "the fitst commit"  
    

3. 版本回退

  1. 使用git log --pretty=oneline命令按照从近到远的顺序显示提交历史,--pretty=oneline参数表示只显示精简信息,可以省略,例如:

    git log  
    
  • 说明
    • HEAD表示最新提交的版本,HEAD^表示上一个提交的版本, HEAD^^表示上上一个提交的版本……依此类推
    • HEAD~<n>表示最新提交之前的第<n>个版本
  1. 使用git reset --hard <version>命令回退到<version>标识的版本,其中<version>可以用HEAD格式表示,也可以用<commit id>表示(可以不写全),例如回退到上一个版本(9bd243df8476a7b4e1a6eba21f2433789a79e673标识的版本):

    git reset --hard HEAD^  
    

    git reset --hard 9bd243  
    
  • 说明

    • 使用<commit id>可以回退版本,也可以在回退后恢复到回退前的版本,例如,如果当前已经回退到9bd243df8476a7b4e1a6eba21f2433789a79e673所标识的版本之前,恢复到该版本可以使用如下命令:

      git reset --hard 9bd243  
      
    • 如果忘记了commit id,可以使用git reflog命令查看命令历史

4. 查看状态

git status命令查看状态信息

5. 查看区别

git diff <version> -- <file>命令显示版本库中<version>标识的版本和工作区中版本的差别,例如显示版本库中readme.txt的最新版本和工作区中版本的差别

git diff HEAD -- readme.txt  

6. 撤销修改

  1. 如果已经把变动添加到暂存区,使用git reset HEAD <file>命令撤销暂存区中的变动
  2. 命令git checkout -- <file>撤销工作区中文件<file>的所有变动,回退到最近一次git addgit commit的状态
    注意
    区分git checkout -- <file>git checkout <branch>

7. 删除文件

  1. git rm <file>命令删除暂存区文件
  2. 如果要删除删除版本库中的文件,再执行git commit命令提交暂存区即可
  3. 如果要恢复工作区中的文件,使用git checkout -- <file>撤销工作区中的变动(这里是指删除)即可

三、远程仓库

1. 添加远程仓库

  1. 在github或gitee等支持Git的平台上创建一个仓库,例如仓库gitdemo
  2. 使用git remote add origin <repo-name>命令关联远程仓库<remote-repo>,其中,origin是惯用名,可以根据需要更改,例如改为giteegithub
  3. 使用git push origin <branch-name>命令将当前分支推到远程仓库的<branch-name>分支。第一次推送时,-u参数把本地分支和远程仓库分支关联起来,可以简化后续使用时的命令

2. 删除远程仓库

git remote rm <remote-repo>命令删除远程仓库<remote-repo>,建议删除前先查看远程仓库信息

3. 查看远程仓库

  • git remote命令查看远程仓库的信息
  • git remote -v命令查看远程仓库的详细信息

4. 克隆远程仓库

git clone <remote-repo>命令克隆远程仓库<remote-repo>到本地
注意
Git执行多种协议,如ssh、https等,推荐使用ssh协议

5. 抓取远程分支

git pull <remote-repo>命令抓取远程仓库<remote-repo>到本地

四、分支管理

1. 创建分支

  • git branch <branch-name>命令创建一个新的分支,名字为<branch-name>,例如:

    git branch dev  
    

    新版Git可使用git switch <branch-name>命令

  • git chechout -b <branch-name>命令创建并切换到分支<branch-name>,例如:

    git checkout -b dev  
    

    新版Git可使用命令git switch -b <branch-name>

  • git checkout -b <branch-name1> origin/<branch-name2>命令在本地创建与远程分支<branch-name2>对应的分支<branch-name1>,并切换到该分支,建议<branch-name1><branch-name2>名字相同

2. 切换分支

git chechout <branch-name>命令切换当前分支为<branch-name>,例如:

git checkout dev  

3. 查看分支

  • git branch命令查看所有分支,其中当前分支前用*标识
  • git log --graph命令查看含有分支合并图的历史信息

4. 合并分支

  • git merge <branch-name>命令将分支<branch-name>合并到当前分支,例如:

    git merge dev  
    

    --no-ff参数表示不使用Fast forward合并模式,而是使用基础合并(新的提交),此时建议使用-m参数指定提交说明

  • 注意

    • Fast forward合并模式是指合并时,将当前分支指针指向待合并分支指针所指的版本
    • 合并分支冲突时需要先解决冲突,然后再提交,合并后完成合并
  • git cherry-pick <commit id>命令将<commit id>标识的版本合并到当前分支,例如:

    git cherry-pick 9bd243  
    

    其中,9bd243df8476a7b4e1a6eba21f2433789a79e673是一个版本标识

5. 删除分支

  • git branch -d <branch-name>命令删除分支<branch-name>,例如:

    git branch -d dev  
    
  • git branch -D <branch-name>命令强行删除分支<branch-name>,例如:

    git branch -D dev  
    

6. 关联分支

git branch --set-upstream-to <branch-name1> origin/<branch-name2>命令将本地分支<branch-name1>与远程分支<branch-name2>关联起来

7. rebase

git rebase命令将交叉分支整理成直线分支

8. 管理未提交分支

  • git stash命令保存正在进行的未提交分支的工作现场

  • git stash list命令查看保存的现场

  • git stash apply命令恢复保存的现场

  • git stash drop命令删除保存的现场

  • git stash pop命令恢复并删除保存的现场
    例如:
    一次bug修复前:

      git stash  
    

    bug修复后:

      git stash apply  
      git stash drop  
    

      git stash pop  
    

分支策略

  • master分支:非常稳定,仅用来发布新版本,时刻与远程同步
  • dev分支:不稳定,供开发使用,发布新版本时合并到master分支,时刻与远程同步
  • bug分支:本地修复bug,无需推送到远程
  • other分支:每个人在自己的分支上工作,并合并到dev分支

多人协作

  1. 尝试git push origin <branch-name>推送自己的变动
  2. 如果推送失败,使用git pull抓取以合并分支;如果提示no tracking information,则使用git branch --set-upstream-to <branch-name1> origin/<branch-name2>
  3. 如果合并冲突,则解决冲突,并在本地提交
  4. 如果没有冲突或已经解决了冲突,使用git push origin <branch-name>推送

五、标签管理

1. 创建标签

  • git tag <tag-name>命令创建一个标签<tag-name>,例如:

    git tag v1.0.0  
    
  • git tag <tag-name> <commit id>命令为<commit id>标识的版本创建标签<tag-name>

  • git tag -a <tag-name> -m <comment> <commit id>命令为标签<tag-name>指定说明<comment>

2. 查看标签

  • git tag命令查看标签,其中标签按字母顺序排列
  • git show <tag-name>命令查看标签说明

3. 删除标签

  1. git tag -d <tag-name>命令删除标签<tag-name>
  2. 如果标签推送到远程,删除远程标签应再执行命令git push origin :refs/tags/<tag-name>

4. 推送标签

  • git push origin <tag-name>命令推送标签到远程(创建的标签都在本地,不会自动推送到远程)
  • git push origin --tags命令推送尚未推送的所有标签到远程

六、自定义Git

1. 忽略特殊文件

  1. 在工作区创建.gitignore文件,然后把需要忽略的文件名或规则填写到该文件中去。该文件本身需要放到版本库中进行管理
  2. 使用git status命令检查上述文件中的规则是否正确。规则中,*表示匹配所有,!表示不匹配
  3. 如果不正确,使用命令git check-ignore -v <file>检查规则

2. 配置别名

  • git config --global alias.<alias> <name>命令为<name>配置别名<alias>,例如:

    git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"  
    
  • .git/config文件是Git的配置文件,[alias]后是已经配置的别名

文件忽略原则

  • 忽略操作系统自动生成的文件
  • 忽略编译生成的中间文件、可执行文件等
  • 忽略自己的带有敏感信息的配置文件

七、常用命令

1. 配置Git

# 显示配置信息
$ git config --list

# 编辑配置文件
$ git config -e [--global]

# 配置用户信息
$ git config [--global] user.name [<user-name>]
$ git config [--global] user.email [<user-email>]

2. 新建仓库

# 当前目录下新建仓库
$ git init

# 新建目录并将其初始化为仓库
$ git init [<dir>]

# 克隆项目及其提交历史
$ git clone [<url>] 

# 克隆项目及其提交历史,并指定本地文件夹名称
$ git clone [<url>] [<dir>]

3. 添加

# 添加指定文件到暂存区
$ git add [<file1>] [<file2>] ...

# 添加指定目录及其子目录到暂存区
$ git add [<dir>]

# 添加当前目录下所有文件、文件夹到暂存区
$ git add .

# 分多次提交同一文件的多处变动,添加每个变动都需要确认
$ git add -p

4. 删除

# 删除工作区中指定文件,并在暂存区记录本次删除
$ git rm [<file1>] [<file2>] ...

# 停止追踪指定文件,但该文件仍保留在工作区
$ git rm --cached [<file>]

# 更改文件名,并在暂存区记录本次变动
$ git mv [<old-name>] [<new-name>]  

5. 提交

# 提交暂存区所有内容到仓库
$ git commit -m [<comment>]

# 提交暂存区的指定文件到仓库
$ git commit [<file1>] [<file2>] ... -m [<comment>]

# 提交自上次提交后工作区的变动到仓库
$ git commit -a

# 提交时显示所有变动信息
$ git commit -v

# 替代上一次提交
$ git commit --amend -m [<comment>]

# 重做上一次提交,同时提交指定文件的变化
$ git commit --amend [<file1>] [<file2>] ...  

6. 撤销

# 恢复暂存区的指定文件到工作区
$ git checkout [<file>]

# 恢复某次提交中的指定文件到暂存区和工作区
$ git checkout [<version>] [<file>]

# 恢复暂存区的所有文件到工作区
$ git checkout .

# 暂存区中的指定文件重置为上一次提交的版本,但工作区不变
$ git reset [<file>]

# 暂存区与工作区重置为上一次提交的版本
$ git reset --hard

# 当前分支的指针重置为指定提交,并重置暂存区为该提交的版本,但工作区不变
$ git reset [<version>]

# HEAD指针重置为指定提交,同时重置暂存区和工作区为该提交的版本
$ git reset --hard [<version>]

# HEAD指针重置为指定提交,但保持暂存区和工作区不变
$ git reset --keep [<version>]

# 当前分支新建提交,并将指定的版本撤销到该提交
$ git revert [<version>]

# 存储并移除未提交的变动
$ git stash

# 存储的未提交变动移入工作区,但不删除存储
$ git stash apply

# 删除存储的未提交变动
$ git stash drop

# 存储的未提交变动移入工作区,并删除存储
$ git stash pop

7. 查看

# 显示文件的变化
$ git status

# 显示文件变化的简短信息
$ git status -s

# 显示当前分支的提交历史
$ git log

# 显示当前分支的提交历史和每次提交发生变动的文件
$ git log --stat

# 图形化显示分支合并历史
$ git log --graph    

# 显示每次提交的tag信息
$ git log --decorate

# 显示指定作者的提交历史
$ git log --author=[<author-name>]    

# 显示根据时间筛选的log信息
$ git log [--since] [--util] [--before] [--after]

# 根据关键词搜索提交历史
$ git log -S [<keyword>]

# 显示某次提交之前的所有提交说明,每个说明占一行
$ git log [<tag>] <version> --pretty --oneline

# 显示某次提交之前符合搜索条件的所有提交说明
$ git log [<tag>] <version> --grep <condition>

# 显示某个文件包括改名在内的提交历史
$ git log --follow [<file>]
$ git whatchanged [<file>]

# 显示指定文件的每一次变动
$ git log -p [<file>]

# 显示最近n次提交
$ git log -<n> --pretty --oneline

# 显示所有提交过的用户,按提交次数排序
$ git shortlog -sn

# 显示指定文件的修改者、修改时间、修改内容等历史信息
$ git blame [<file>]

# 显示暂存区和工作区的差异
$ git diff

# 显示暂存区中指定文件和上一次提交的差异
$ git diff --cached [<file>]

# 显示工作区与当前分支最新提交的差异
$ git diff HEAD

# 显示两个分支分开后的差异
$ git diff [<version1>]...[<version2>]

# 显示未提交的变动行数
$ git diff --shortstat "@{0 day ago}"

# 显示某次提交的元数据和内容变化
$ git show [<version>]

# 显示某次提交发生变动的文件
$ git show --name-only [<version>]

# 显示指定提交中指定文件的变动内容
$ git show [<version>]:[<file>]

# 显示当前分支的最近提交
$ git reflog

8. 远程同步

# 获取远程仓库的所有变动
$ git fetch [<remote-repo>]

# 显示所有远程仓库
$ git remote -v

# 显示某个远程仓库的信息
$ git remote show [<remote-repo>]

# 增加一个新的远程仓库,并命名
$ git remote add [<repo-name>] [<url>]

# 获取远程仓库的变动,并与本地分支合并
$ git pull [<remote-repo>] [<branch-name>]

# 推送本地指定分支到远程仓库
$ git push [<remote-repo>] [<branch-name>]

# 强行推送当前分支到远程仓库
$ git push [<remote-repo>] --force

# 推送所有分支到远程仓库
$ git push [<remote-repo>] --all

9. 分支管理

# 显示所有本地分支
$ git branch

# 显示所有远程分支
$ git branch -r

# 显示所有本地分支和远程分支
$ git branch -a

# 新建一个分支但不切换分支
$ git branch [<branch-name>]

# 新建一个分支并切换到该分支
$ git checkout -b [<branch-name>]

# 新建一个指向指定提交的分支
$ git branch [<branch-name>] [<version>]

# 新建一个分支并与指定的远程分支建立联系
$ git branch --track [<branch-name>] [<remote-branch>]

# 切换到指定分支,并更新工作区
$ git checkout [<branch-name>]

# 切换到上一个分支
$ git checkout -

# 本地分支与指定的远程分支建立联系
$ git branch --set-upstream [<branch-name>] [<remote-branch>]

# 合并指定分支到当前分支
$ git merge [<branch-name>]

# 合并指定提交到当前分支
$ git cherry-pick [<version>]

# 删除分支
$ git branch -d [<branch-name>]

# 删除远程分支
$ git push origin --delete [<branch-name>]
$ git branch -dr [<remote/branch>]

10. 标签管理

# 显示所有tag
$ git tag

# 为当前提交新建一个tag
$ git tag [<tag>]

# 为指定提交新建一个tag
$ git tag [<tag>] [<version>]

# 删除本地tag
$ git tag -d [<tag>]

# 删除远程tag
$ git push origin :refs/tags/[<tag>]

# 查看tag信息
$ git show [<tag>]

# 提交指定tag
$ git push [<remote-repo>] [<tag>]

# 提交所有tag
$ git push [<remote-repo>] --tags

# 新建一个分支,指向某个tag
$ git checkout -b [<branch-name>] [<tag>]

11. 其他

# 生成一个可供发布的压缩包
$ git archive
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值