Young Kbt blog Young Kbt blog
首页
  • java基础

    • Java基础
    • Java集合
    • Java反射
    • JavaJUC
    • JavaJVM
  • Java容器

    • JavaWeb
  • Java版本新特性

    • Java新特性
  • SQL 数据库

    • MySQL
    • Oracle
  • NoSQL 数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • ActiveMQ
    • RabbitMQ
    • RocketMQ
    • Kafka
  • 进阶服务

    • Nginx
  • Spring
  • Spring Boot
  • Spring Security
  • 设计模式
  • 算法
  • 知识
  • 管理

    • Maven
    • Git
  • 部署

    • Linux
    • Docker
    • Jenkins
    • Kubernetes
  • 进阶

    • TypeScript
  • 框架

    • React
    • Vue2
    • Vue3
  • 轮子工具
  • 项目工程
  • 友情链接
  • 本站

    • 分类
    • 标签
    • 归档
  • 我的

    • 收藏
    • 关于
    • Vue2-Admin (opens new window)
    • Vue3-Admin(完善) (opens new window)
GitHub (opens new window)

Shp Liu

朝圣的使徒,正在走向编程的至高殿堂!
首页
  • java基础

    • Java基础
    • Java集合
    • Java反射
    • JavaJUC
    • JavaJVM
  • Java容器

    • JavaWeb
  • Java版本新特性

    • Java新特性
  • SQL 数据库

    • MySQL
    • Oracle
  • NoSQL 数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • ActiveMQ
    • RabbitMQ
    • RocketMQ
    • Kafka
  • 进阶服务

    • Nginx
  • Spring
  • Spring Boot
  • Spring Security
  • 设计模式
  • 算法
  • 知识
  • 管理

    • Maven
    • Git
  • 部署

    • Linux
    • Docker
    • Jenkins
    • Kubernetes
  • 进阶

    • TypeScript
  • 框架

    • React
    • Vue2
    • Vue3
  • 轮子工具
  • 项目工程
  • 友情链接
  • 本站

    • 分类
    • 标签
    • 归档
  • 我的

    • 收藏
    • 关于
    • Vue2-Admin (opens new window)
    • Vue3-Admin(完善) (opens new window)
GitHub (opens new window)
  • 版本管理 - Maven

  • 开发管理 - Git

    • Git - 介绍与安装
    • Git - 常用命令
      • Git常用命令
        • 本地命令
        • 远程命令
      • 设置用户签名
        • 项目级别/仓库级别
        • 系统用户级别
        • 级别优先级
        • 说明
      • 初始化本地库
      • 查看本地库状态
      • 文件增删改操作
        • 删除暂存区的文件
        • 添加文件到暂存区
        • 提交文件到本地库
      • 历史版本操作
        • 查看历史版本
        • 切换历史版本
      • 比较文件操作
      • 分支操作
        • 什么是分支?
        • 分支的好处?
        • 分支操作
        • 分支冲突
        • 创建分支和切换分支图解
      • 分支进阶操作
        • 删除所有记录
        • 删除上次记录
        • 同时修改本地分支名和对应的远程分支名
    • Git - 基本原理
    • Git - SSH免密登录
    • Git - IDEA集成
    • Git - 自建代码托管平台
    • Git - Commit常用表情
  • 操作系统 - Linux

  • 容器部署 - Docker

  • 持续集成 - Jenkins

  • 容器管理 - kubernetes

  • 工具
  • 开发管理 - Git
Young Kbt
2022-02-08
目录

Git - 常用命令

笔记

下面我们学习 Git 在本地常用的命令,也是开发经常用到的命令。

2022-02-08 @Young Kbt

  • Git常用命令
    • 本地命令
    • 远程命令
  • 设置用户签名
    • 项目级别/仓库级别
    • 系统用户级别
    • 级别优先级
    • 说明
  • 初始化本地库
  • 查看本地库状态
  • 文件增删改操作
    • 删除暂存区的文件
    • 添加文件到暂存区
    • 提交文件到本地库
  • 历史版本操作
    • 查看历史版本
    • 切换历史版本
  • 比较文件操作
  • 分支操作
    • 什么是分支?
    • 分支的好处?
    • 分支操作
    • 分支冲突
    • 创建分支和切换分支图解
  • 分支进阶操作
    • 删除所有记录
    • 删除上次记录
    • 同时修改本地分支名和对应的远程分支名

# Git常用命令

# 本地命令

命令名称 作用
git config --global user.name 用户名 设置用户签名
git config --global user.email 邮箱 设置用户签名
git init 初始化本地库
git status 查看本地库状态
git add 文件名(-A 代表目录及子目录下所有文件名) 添加到暂存区
git commit -m "日志信息" [文件名](不加文件名,默认所有文件都添加该日志信息) 添加到本地库
git reflog 查看历史记录(简要)
git log 查看历史记录(详细)
git log --pretty=oneline 一行显示一个版本信息(版本号完整)
git log --oneline 一行显示一个版本信息(版本号简写)
git reset --hard 版本号 版本穿梭、跳转
git diff [文件名] 比较工作区中和暂存区的文件
git diff [本地库中历史版本] [文件名] 比较工作区中的文件和本地库历史记录
git branch 分支名 创建分支
git branch -D 分支名 删除分支
git branch -m 新的分支名 将当前分支名改为新的分支名
git branch -v 查看分支
git checkout 分支名 切换分支
git merge 分支名 合并分支

# 远程命令

命令名称 作用
git remote -v 查看当前所有远程地址别名
git remote add 别名 远程地址 起别名
git push 别名 分支 推送本地分支上的内容到远程仓库
git clone 远程地址 将远程仓库的内容克隆到本地
git pull 远程库地址别名 远程分支名 将远程仓库对于分支最新内容拉下来后与 当前本地分支直接合并

如果 git push 不加别名和分支,默认别名是 origin,分支是 master。

我们 clone 项目会自动做如下操作:

  • 拉取代码
  • 初始化本地仓库
  • 创建别名,默认是 origin

具体看 Git - SSH免密登录。

# 设置用户签名

# 项目级别/仓库级别

仅在当前本地库范围内有效。

git config user.name 用户名
git config user.email 邮箱
1
2

信息保存位置:./.git/config 文件里。

# 系统用户级别

登录当前操作系统的用户范围。

git config --global user.name 用户名
git config --global user.email 邮箱
1
2

image-20220208133344605

信息保存位置:设置了用户签名,会在用户盘下生成 .gitconfig 文件,里面也可以直接修改自己的信息。

# 级别优先级

  • 就近原则:项目级别优先于系统用户级别,二者都有时采用项目级别的签名

  • 如果只有系统用户级别的签名,就以系统用户级别的签名为准

  • 二者都没有不允许

# 说明

签名的作用是区分不同操作者身份。用户的签名信息在每一个版本的提交信息中能够看到,以此确认本次提交是谁做的。Git 首次安装必须设置一下用户签名,否则无法提交代码。

邮箱可以是虚拟邮箱,Git 不会去识别。

注意:这里设置用户签名和将来登录 GitHub(或其他代码托管中心)的账号没有任何关系。

# 初始化本地库

基本语法:

git init
1

该指令会将目录下的所有子目录以及文件交给 Git 管理,也是我们使用 Git 最重要的一步。

执行该指令后,会在当前目录下生成 .git 目录,该目录默认是隐藏的。

注意:.git 目录中存放的是本地库相关的子目录和文件,不要删除,也不要胡乱修改。

# 查看本地库状态

查看工作区、暂存区状态。

基本语法:

git status
1

image-20220208134440861

可以看到,我删除了 3 个文件,还没有放到暂存区(红色),存到了暂存区(绿色),存到了本地库(消失)。

# 文件增删改操作

# 删除暂存区的文件

git rm --cached 文件名
1

# 添加文件到暂存区

git add 文件名
git add -A  # -A 代表全名文件
1
2

# 提交文件到本地库

git commit -m "日志信息" [文件名] # 文件名可不写
1

# 历史版本操作

# 查看历史版本

git log   # 查看详细版本信息
git reflog  # 查看简要版本信息
git log --pretty=oneline  # 一行显示一个版本信息(版本号完整)
git log --oneline  # 一行显示一个版本信息(版本号简写)
1
2
3
4

多屏显示控制方式:

  • 空格向下翻页

  • b 向上翻页

  • q 退出

# 切换历史版本

  • 基于索引值操作[推荐]

    git reset --hard [局部索引值]
    git reset --hard a6ace91   # 例子
    
    1
    2
  • 使用 ^ 符号:只能后退

    git reset --hard HEAD^
    
    1

    注:一个 ^ 表示后退一步,n 个表示后退。

  • 使用 ~ 符号:只能后退

    git reset --hard HEAD~n
    
    1

    注:表示后退 n 步。

  • 使用 HEAD 符号,恢复当前提交本地库的版本

    git reset --hard HEAD
    
    1

    注:在当前版本中删除了某个文件,可以恢复到当前最初的版本。

reset 命令的三个参数对比

  • --soft 参数

    • 仅仅在本地库移动 HEAD 指针
  • --mixed 参数

    • 在本地库移动 HEAD 指针
    • 重置暂存区
  • --hard 参数

    • 在本地库移动 HEAD 指针
    • 重置暂存区
    • 重置工作区

# 比较文件操作

将工作区中的文件和暂存区进行比较

git diff [文件名]
1

将工作区中的文件和本地库历史记录比较

git diff [本地库中历史版本] [文件名]
1

不带文件名则比较多个文件。

如果 [本地库中历史版本] 是 HEAD,则比较当前版本。

# 分支操作

image-20220208142253151

# 什么是分支?

在版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个任务的单独分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时候,不会影响主线分支的运行。对于初学者而言,分支可以简单理解为副本,一个分支就是一个单独的副本。(分支底层其实也是指针的引用)

image-20220208142308410

# 分支的好处?

同时并行推进多个功能开发,提高开发效率。

各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可。

# 分支操作

命令名称 作用
git branch 分支名 创建分支
git branch -D 分支名 删除分支
git branch -m 新的分支名 将当前分支名改为新的分支名
git branch -v 查看分支
git checkout 分支名 切换分支
git merge 分支名 合并分支

创建分支

git branch [分支名]
1

删除分支

git branch -D 分支名
1

将当前分支名改为新的分支名

git branch -m 新的分支名
1

查看分支

git branch -v
1

切换分支

git checkout [分支名]
1

合并分支

  • 第一步:切换到接受修改的分支(被合并,增加新内容)上

    git checkout [被合并的分支名]
    
    1
  • 第二步:执行 merge 命令

    git merge [有新内容的分支名]
    
    1

# 分支冲突

产生冲突

冲突的表现:后面状态为 MERGING

image-20220208140823758

冲突产生的原因:合并分支时,两个分支在 同一个文件的同一个位置 有两套完全不同的修改。Git 无法替 我们决定使用哪一个。必须 人为决定 新代码内容。

冲突如图(修改的是同一个位置):

image-20220208152143419

解决冲突

冲突的解决:

  • 第一步:编辑文件,删除特殊符号

  • 第二步:把文件修改到满意的程度,保存退出

  • 第三步:添加到暂存区,git add [文件名]

  • 第四步:执行提交,git commit -m "日志信息"(注意:此时 commit 一定不能带具体文件名)

# 创建分支和切换分支图解

image-20220208142934045

master、hot-fix 其实都是指向具体版本记录的指针。当前所在的分支,其实是由 HEAD 决定的。所以创建分支的本质就是多创建一个指针。

HEAD 如果指向 master,那么我们现在就在 master 分支上。

HEAD 如果执行 hotfix,那么我们现在就在 hotfix 分支上。

# 分支进阶操作

# 删除所有记录

想清空所有 commit 的信息记录,就像形成一个全新的仓库,且代码不变。

  1. 先切换到新的分支

    git branch kele
    git checkout kele
    
    1
    2
  2. 添加所有文件到暂存区(除了 .gitignore 中排除的)

    git add -A
    
    1
  3. 提交跟踪过的文件到本地库

    git commit -am "commit message"
    
    1
  4. 删除 master 分支

    git branch -D master
    
    1
  5. 重命名当前分支为 master

    git branch -m master
    
    1
  6. 提交到远程 master 分支

    git push -f origin master
    
    1

# 删除上次记录

如果只是想修改上次提交的代码,做一次更完美的 commit,可以这样:

  1. 回到到上个版本(注:不要带 --hard)

    git reset commitId
    
    1
  2. 暂存修改

    git stash
    
    1
  3. 强制 push,这样远程的最新的一次 commit 被删除

    git push --force
    
    1
  4. 释放暂存的修改,开始修改代码

    git stash pop
    
    1
  5. 添加、推送

    git add
    git commit -m "massage"
    git push
    
    1
    2
    3

# 同时修改本地分支名和对应的远程分支名

修改前要确保本地分支的代码是最新的,并且修改后不会影响到同事的代码。

  1. 修改本地分支名
git branch -m oldBranchName newBranchName
1
  1. 删除远程分支
git push origin :oldBranchName
1
  1. 改名后的本地分支推送到远程
git push --set-upstream origin newBranchName
1
编辑此页 (opens new window)
#Git
更新时间: 2023/10/23, 10:58:52
Git - 介绍与安装
Git - 基本原理

← Git - 介绍与安装 Git - 基本原理→

最近更新
01
技术随笔 - Element Plus 修改包名 原创
11-02
02
Reactor - 扩展性
11-02
03
Reactor - 最佳实践
11-02
更多文章>
Theme by Vdoing | Copyright © 2021-2024 Young Kbt | blog
桂ICP备2021009994号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式