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保存

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

相关推荐
2401_8260976219 小时前
同步&异步日志系统-日志落地模块的实现
c++·git·vim
半旧夜夏19 小时前
阿里云IOT消息处理
java·ide·git·物联网·spring·阿里云
我们的五年21 小时前
【Git版本控制器】第三弹——版本回退,撤销修改,删除文件
大数据·linux·git
一名嵌入式糕手21 小时前
Git从基础到进阶
git
不cong明的亚子1 天前
github用户名密码登陆失效了
git·github
QC七哥1 天前
git开发流程以及github社区企业版
git·github
邂逅you1 天前
GitHub基本操作及Git简单命令
git·github
EngZegNgi1 天前
git 提示 fatal: The remote end hung up unexpectedly
git
ricky_fan1 天前
本地部署MindSearch(开源 AI 搜索引擎框架),然后上传到 hugging face的Spaces——L2G6
人工智能·git·python
misty youth2 天前
github与git bash绑定问题
git·github·bash