git命令使用详情

目录

[一. 安装教程](#一. 安装教程)

[二. git配置](#二. git配置)

[1. 查看git配置参数](#1. 查看git配置参数)

[2. 设置邮箱和用户名](#2. 设置邮箱和用户名)

[3. SSH配置](#3. SSH配置)

[4. 配置git远程库公钥](#4. 配置git远程库公钥)

[5. 编码设置](#5. 编码设置)

[三. git 提交流程](#三. git 提交流程)

[1. 整体操作流程图](#1. 整体操作流程图)

[2. Git仓库包含5个区域](#2. Git仓库包含5个区域)

[3. 下载、提交、更新命令](#3. 下载、提交、更新命令)

[3.1. 下载](#3.1. 下载)

[3.2. 提交](#3.2. 提交)

[3.3. 更新(两种方式)](#3.3. 更新(两种方式))

[四. git 冲突解决](#四. git 冲突解决)

[1. git 冲突的类型及合并策略](#1. git 冲突的类型及合并策略)

[2. git pull --rebase 冲突](#2. git pull --rebase 冲突)

[2.1 develop 更新时内容冲突](#2.1 develop 更新时内容冲突)

[2.2 内容冲突处理](#2.2 内容冲突处理)

[2.3 树冲突解决](#2.3 树冲突解决)

[3. cherry-pick冲突](#3. cherry-pick冲突)

[4. git merge冲突](#4. git merge冲突)

[五. 修改历史提交](#五. 修改历史提交)

[1 单个文件回退到某个历史版本](#1 单个文件回退到某个历史版本)

[2 修改最近一次提交内容或注释(git commit --amend )](#2 修改最近一次提交内容或注释(git commit --amend ))

[3. 修改某次历史提交(git rebase -i)](#3. 修改某次历史提交(git rebase -i))

[3.1 合并提交(s)](#3.1 合并提交(s))

[3.2 修改提交信息(r)](#3.2 修改提交信息(r))

[3.3 修改提交的内容](#3.3 修改提交的内容)

[3.4 删掉提交(d)](#3.4 删掉提交(d))


一. 安装教程

安装教程https://mp.csdn.net/mp_blog/creation/editor/141688528

二. git配置

1. 查看git配置参数

  • 查看Git的配置配置参数命令
bash 复制代码
# 这条命令会列出所有设置为全局(--global)的配置选项及其值
git config --global --list

# 显示当前设置的全局用户名
git config --global user.name

# 展示所有级别的配置,包括本地仓库的配置、用户级别的配置以及系统级别的配置
git config --list
  • 执行结果

2. 设置邮箱和用户名

  • 安装完成之后需要配置自己名称和邮箱
bash 复制代码
# 设置自己的用户名
git config --global user.name "李四"

# 设置自己的邮箱
git config --global user.email "323@qq.com"
  • 如果设置名称和邮箱报错

错误信息:

warning: user.email has multiple values error: cannot overwrite multiple values with a single value Use a regexp, --add or --replace-all to change user.email.

错误原因:

通过 git config --list 命令 发现有多个user.name 或者多个user.email

解决问题办法:

执行以下命令

bash 复制代码
# 执行以下命令
git config --global --replace-all user.name "李四"
git config --global --replace-all user.email "123456@qq.com"

3. SSH配置

SSH配置需要生成公钥(http协议忽略生成公钥)

右键选择"Git Bash Here",输入如下命令生成公钥。

并按回车3下,为什么按三下:是因为有提示你是否需要设置密码,如果设置了每次使用Git都会用到密码。

会在一个文件夹里面生成一个私钥 id_rsa和一个公钥id_rsa.pub。(可执行start ~ 命令,生成的公私钥在 .ssh的文件夹里面)

bash 复制代码
# 执行生成公钥和私钥的命令
ssh-keygen -t rsa -C '自己邮箱'

查看公钥命令

bash 复制代码
# 查看公钥内容
cat ~/.ssh/id_rsa.pub

4. 配置git远程库公钥

  • 通过【设置】->【ssh公钥】进入码云的如下界面,黏贴公钥
  • 把刚才在git bash里生成的公钥黏贴在公钥里点确定就好了

5. 编码设置

bash 复制代码
# 注释:该命令表示提交命令的时候使用utf-8编码集提交
git config --global i18n.commitencoding utf-8 

# 注释:该命令表示日志输出时使用utf-8编码集显示
git config --global i18n.logoutputencoding utf-8
 
# 注释:设置LESS字符集为utf-8
export LESSCHARSET=utf-8  

三. git 提交流程

1. 整体操作流程图

2. Git仓库包含5个区域

  1. 工作区
  2. 暂存区
  3. 本地仓库
  4. 本地远程库镜像
  5. 远程仓库

3. 下载、提交、更新命令

3.1. 下载

**下载:**git clone + git checkout

命令 说明
git clone -b test(分支) https:(代码url) 克隆远程库到本地
git checkout test 切换到test分支

代码示例

bash 复制代码
# 克隆 master 分支到本地
git clone -b master  https://test.jjj.com

# 切换分支到 test
git checkout test

3.2. 提交

提交 :git add + git commit + git push

命令 说明
git add 分支 添加文件到暂存区
git commit 提交文件到本地版本库
git push 将本地版本库中当前分支推送到默认远程片库。

代码示例

bash 复制代码
# 推送所有变更的文件到缓存区
git add .

# 提交变更文件到本地库
git commit -m "提交日志"

# 推送本地仓库到远程仓库
git push

3.3. 更新(两种方式)

方式一(推荐):git pull --rebase = git fetch + git rebase

命令 说明
git pull --rebase 从默认远程库拉取本地库当前分支内容,并与本地库当前分支进行rebase合并
git fetch 获取远程库内容
git rebase 以rebase方式合并分支

方式二(不推荐):git pull = git fetch + git merge

命令 说明
git pull 从默认远程库拉取本地库当前分支内容,并与本地库当前分支进行merge合并
git fetch 获取远程库内容
git merge 以rebase方式合并分支

四. git 冲突解决

git 冲突的类型和解决方法,git冲突有两种类型: 内容冲突树冲突。内容冲突 是因为不同用户修改了同一文件的同一区域产生的;树冲突 是因为不同用户把同一文件改为不同的名字而产生。

1. git 冲突的类型及合并策略

  • **内容冲突:**当产生内容冲突时,如果需要保留一方的内容,使用命令git checkout --ours/theirs < file-name > 实现,如果需要合并,可以手动修改文件。
  • **树冲突:**产生树冲突时根据实际的需要,使用git rm/add <file-name> 对文件进行添加和删除。

2. git pull --rebase 冲突

**注意:**在更新代码时,为了避免没有提交的文件和服务器文件产生冲突,可以先把 本地修改暂存起来,在提交完后,再弹出本地修改,流程如下。

bash 复制代码
# 1.把本地修改先暂存起来
git stash

# 2.拉取代码
git pull --rebase

# 3.在把本地暂存文件弹出来
git stash pop

2.1 develop 更新时内容冲突

  • 拉取代码是产生一个冲突内容冲突

2.2 内容冲突处理

  • 查看文件状态
  • 有三种解决冲突的方式

**第一种:**使用服务上的修改

**第二种:**使用本地修改

**第三种:**手动合并修改

  • 冲突后续处理

2.3 树冲突解决

  • 查看树冲突的文件状态
  • 解决冲突
  • 后续处理

3. cherry-pick冲突

注意: cherry-pick 空提交时,会直接退出pick状态; 拣选连续的多个提交命令:git cherry-pick aa^..bb。

示例

目前有两个分支 develop 和 master, 想把 develop 的提交拣选到 master上

  1. 执行步骤
bash 复制代码
# 查看分支提交日志
git log

# 切换到 master 分支
git checkout master

# 拣选某个develop上的提交
git cherry-pick commitID
  1. 在拣选的时候出现冲突
  1. 手动解决冲突,先用 git status 查看出现冲突的文件
  1. 使用 vim 手动对冲突的文件进行修改
  1. 解决后的界面如下
  1. 使用 git add 提交修改
  1. git cherry-pick --continue 弹出提交信息交互界面,修改后保存退出,cherry-pick操作完成

4. git merge冲突

当执行merge时,会出现冲突。Git会停止合并过程,并抛出冲突信息

bash 复制代码
# 合并分支时出现冲突
git merge other-branch
 
# 查看冲突文件
git status
 
# 手动解决冲突
# 编辑文件,选择代码并删除 <<<<<<<, =======, >>>>>>> 标记
vi f.txt
 
# 标记冲突已解决
git add other-branch
 
# 完成合并
git merge --continue
 
# 如果需要取消合并
git merge --abort

五. 修改历史提交

1. 单个文件回退到某个历史版本

1.1 查看文件修改记录:git log test.txt

1.2 回退文件到 d46d797e50c47bc 版本:git checkout d46d797e50c47bc test.txt

2. 修改最近一次提交内容或注释(git commit --amend )

  1. 修改最近一次提交注释内容

  2. 执行命令:git commit --amend


2. 如果要修改内容, 则执行如下过程

  1. 修改文件内容:vi test.txt
  2. 查看文件状态:git status
  3. 添加缓存区:git add .
  4. 提交本地仓库:git commit -m "提交代码"

**注意:**不管是修改了内容或者是提示,commitID 都会改变

3. 修改某次历史提交(git rebase -i)

命令 :git rebase -i [commitID] (其中 commitID 是要修改的提交的前一次ID

此命令的交互界面命令如下

常用参数说明

|-----------|--------------|
| r, reword | 编辑某次提交的提交信息 |
| e, edit | 修改某提提交的内容 |
| s, squash | 把本次的提交合并到上一次 |
| d, drop | 删除某次提交 |

3.1. 合并提交(s)

3.1.1 查看提交日志,想把C提交合并到B提交上

3.1.2 运行 git rebase -i -A 后,在交互界面输入s,保存退出

弹出变基交互界面

3.1.3 保存后弹出包含两次提交的提交信息如下:其中以#开始的内容时注释,不带#的是信息

根据需要修改提交信息如下,然后保存退出

3.1.4 再次查看日志,前两个提交合并到一起了

3.2. 修改提交信息(r)

注意:修改第一次提交的命令是 git rebase -i --root

3.2.1 查看提交信息

3.2.2 变基到要修改的提交的前一个提交上

git rebase -i 0138a47

在弹出的交互界面里,把 pick字段改成r

保存后,弹出交互的提交信息界面,在这个界面里修改要提交的信息即可

3.2.3 再次查看提交信息,提交信息已经改动

3.3. 修改提交的内容(e)

3.3.1 查看要修改的提交的具体内容

修改下图中id为9490d07的提交, 通过git show查看到这个提交对文件README.md进行了修改

3.3.2 使用命令 git rebase -i 0138a47 变基到要修改提交的前一次提交上

然后弹出 rebase 的操作选项,如下图,把要修改的提交前的参数修改成e

3.3.3 保存交互界面后,对文件进行修改

Vi README.md

对文档添加如下信息,然后进行保存

3.3.4 对改动进行保存

git add README.md

git commit --amend

git rebase --continue

查看改变的提交

3.4. 删掉提交(d)

3.4.1 git log --pretty=oneline -3

3.4.2 git rebase -i 0138a47 #变基

然后弹出交互界面里输入d保存

然后查看日志,刚才的提交的信息就没了

相关推荐
Winston Wood3 小时前
一文了解git TAG
git·版本控制
喵喵先森3 小时前
Git 的基本概念和使用方式
git·源代码管理
xianwu5435 小时前
反向代理模块
linux·开发语言·网络·git
binishuaio7 小时前
Java 第11天 (git版本控制器基础用法)
java·开发语言·git
会发光的猪。8 小时前
如何在vscode中安装git详细新手教程
前端·ide·git·vscode
stewie69 小时前
在IDEA中使用Git
java·git
晓理紫18 小时前
使用git lfs向huggingface提交较大的数据或者权重
git
我不是程序猿儿20 小时前
【GIT】sourceTree的“当前分支“,“合并分支“与“检出分支的区别
git
_OLi_1 天前
IDEA中新建与切换Git分支
java·spring boot·git
PyAIGCMaster1 天前
ubuntu下安装 git 及部署cosyvoice(1)
git