目录
[一. 安装教程](#一. 安装教程)
[二. 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个区域
- 工作区
- 暂存区
- 本地仓库
- 本地远程库镜像
- 远程仓库
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上
- 执行步骤
bash# 查看分支提交日志 git log # 切换到 master 分支 git checkout master # 拣选某个develop上的提交 git cherry-pick commitID
- 在拣选的时候出现冲突
- 手动解决冲突,先用 git status 查看出现冲突的文件
- 使用 vim 手动对冲突的文件进行修改
- 解决后的界面如下
- 使用 git add 提交修改
- 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 )
修改最近一次提交注释内容
执行命令:git commit --amend
2. 如果要修改内容, 则执行如下过程
- 修改文件内容:vi test.txt
- 查看文件状态:git status
- 添加缓存区:git add .
- 提交本地仓库: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保存
然后查看日志,刚才的提交的信息就没了