Git操作 | 青训营笔记

109 阅读6分钟

这是我参加「第四届青训营」笔记创作活动的第5天

今天是学习Git操作的内容。

Git中三个仓库

  • 工作区

    • 处理工作地区
  • 暂存区

    • 临时存放地区
  • Git仓库

    • 最终存放地区

Git中三种状态

  • 已修改 modified

    • 修改了还没放到暂存
  • 已暂存 staged

    • 对修改文件标记了,放在下次提交列表中
  • 已提交 committed

    • 文件已经安全保存在本地的git仓库中

配置用户信息

  • git config --global user.name "用户名"
  • git config --global user.email "邮箱"

检查配置用户信息

查看所有的全局配置项

  • git config --list --global

查看指定的全局配置项

  • git config user.name
  • git config user.email

获取帮助信息

git help <verb> 例如 git help config 浏览器展示

git config -h 终端展示

获取Git仓库的方式

  • 将尚未进行版本控制的本地目录转换为Git仓库

    • 在项目目录中,通过鼠标右键打开“Git Bash”
    • 执行git init命令将当前的目录转化为Git仓库
  • 从其它服务器克隆一个已存在的Git仓库

工作区文件的4种状态

  • 未被git管理

    • 未追踪(Untracked) 不被Git所管理的文件
  • 已被git管理

    • 未修改(Unmodified)

      • 工作区中文件的内容和Git仓库中的文件内容保持一致
    • 已修改(Modified)

      • 工作区文件的内容和Git仓库中文件的内容不一致
    • 已暂存(Staged)

      • 工作区中被修改的文件已被放到暂存区,准备将修改后的文件保存到Git仓库中去

检查文件的状态

可以使用git status命令查看文件处于什么状态(git status -s精简形式)

跟踪新文件

使用命令git add开始跟踪一个新文件例如:git add 1.html

清空屏幕

clear操作

提交更新

现在暂存区中有一个index.html文件等待被提交到Git仓库中保存。可以执行git commit命令进行提交,其中**-m选项后面是本次的提交信息**,用来对提交的内容做进一步的描述

git commit -m "新建了1.html文件"

先跟踪在提交

对已提交文件进行修改

修改后就是已修改(红色M)状态,如果要暂存这次修改需要再次运行git add命令(绿色M)

提交已暂存的文件

再次运行git commit -m命令

撤销对文件的修改

撤销对文件的修改指的是:把对工作区中对应的文件的修改,还原成Git仓库中所保存的版本。操作的结果:所有的修改会丢失,且无法回复!危险性比较高,慎重操作!

git checkout -- 1.html

向暂存区中一次性添加多个文件

git add .

取消暂存的文件

git reset HEAD 要移除的文件名称

git reset HEAD 1.html

移除暂存区所有文件

git reset HEAD .

跳过使用暂存区

加一个-a直接提交至git仓库

git commit -a -m "描述信息"

移除文件

  • 从Git仓库和工作区中同时移除文件

    • git rm -f 1.js
  • 只从Git仓库中移除1.css,但保留工作区中的1.css文件

    • git rm --cached 1.css

忽略文件

一般一些文件无需纳入Git的管理,也不希望他们总出现在未跟踪文件列表。在这种情况下,我们可以创建一个名为 .gitignore 的配置文件,列出要忽略的文件的匹配模式。新建一个配置文件

  • #开头的是注释

  • /结尾的是目录

  • /开头防止递归(只忽略当前目录下)

  • !开头表示取反

  • 可以使用glob模式进行文件和文件夹的匹配(glob指简化了的正则表达式)

    • 星号* 匹配零个或多个任意字符
    • [abc] 匹配任何一个列在方括号中的字符(此案例匹配一个a或一个b或匹配一个c)
    • 问好? 只匹配任意一个字符
    • 方括号中使用短划线分割两个字符,表示所有在这两个字符范围内的都可以匹配(比如[0~9]表示匹配0到9的数字)
    • 两个星号** 表示匹配任意中间目录(比如a/**/z可以匹配a/z、a/b/z或者a/b/c/z等)

查看提交历史

  • 按时间先后顺序列出所有提交历史

    • git log
  • 只展示最新两条提交历史

    • git log -2
  • 在一行上展示最近两条提交历史信息

    • git log -2 --pretty=oneline
  • 在一行上展示最近两条提交历史信息,并自定义格式;

    • %h 提交的简写哈希值;%an作者姓名;%ar作者修改日期,按多久以前的方式显示;%s提交说明

      • git log -2 --pretty=format:"%h | %an | %ar | %s"

回退到指定的版本

  • 在一行上展示所有的提交历史

    • git log --pretty=online
  • 使用git reset --hard命令,根据指定的提交ID回退到指定版本

    • git reset --hard <CommitID>
  • 旧版本中使用git reflog --pretty=online命令,查看命令操作的历史

    • git reflog --pretty=online
  • 再次根据最新的提交ID,跳转至最新的版本

    • git reset --hard <CommitID>
    • git reset --hard 28dd9c5

GitHub

  • git push

生成SSH key

  1. 打开Git Bash
  2. 粘贴如下命令ssh-keygen-t rsa -b 4096 -C"邮箱"

配置SSH key

  1. 打开id_rsa.pub文件,复制内容
  2. 登录Github ,点击头像->settings->SSH and GPG Keys->New SSH key
  3. 粘贴内容
  4. 在Title文本框填写一个名称,标志Key从何而来

检测是否配置成功

ssh -T git@github.com

将远程仓库克隆到本地

git clone 远程仓库地址

分支

  • 查看分支

    • git branch
  • 创建分支

    • git branch 分支名称
  • 切换分支

    • git checkout 分支名称
  • 创建并切换

    • git checkout -b 分支名称
  • 合并分支

    • 修改完提交
      1. 切换到主分支 main
      2. git checkout main
      3. 使用git merge 分支
  • 删除分支

    • git branch -d 分支名称
  • 冲突时打开文件手动解决

  • 将本地分支推送到远程仓库

      1. -u 表示把本地分支和远程仓库进行关联,只有在第一次推送时需要

        • git push -u 远程仓库别名 本地分支名称:远程分支名称
        • 实例 git push -u origin payment:pay
        • 如果希望名称保持一致可以 git push -u origin payment
  • 查看远程仓库中所有分支列表

    • git remote show 远程仓库名称
  • 跟踪分支(把远程仓库中的远程分支下载到本地仓库)

    • git checkout 远程分支名字

      • git checkout pay
    • 下载远程分支并重命名

      • git checkout -b 本地分支名称 远程仓库名字/远程分支名称

        • git checkout -b payment origin/pay
    • 拉取远程分支最新的代码

      • git pull
    • 删除远程仓库分支

      • git push 远程仓库名称 --delete 远程分支名称
      • git push origin --delete pay