目录
2 修改最近一次提交内容或注释(git commit --amend )
一. 安装教程
安装教程https://mp.csdn.net/mp_blog/creation/editor/141688528
二. git配置
1. 查看git配置参数
- 查看Git的配置配置参数命令
# 这条命令会列出所有设置为全局(--global)的配置选项及其值 git config --global --list # 显示当前设置的全局用户名 git config --global user.name # 展示所有级别的配置,包括本地仓库的配置、用户级别的配置以及系统级别的配置 git config --list
- 执行结果
2. 设置邮箱和用户名
- 安装完成之后需要配置自己名称和邮箱
# 设置自己的用户名 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解决问题办法:
执行以下命令
# 执行以下命令 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的文件夹里面)# 执行生成公钥和私钥的命令 ssh-keygen -t rsa -C '自己邮箱'
查看公钥命令
# 查看公钥内容 cat ~/.ssh/id_rsa.pub
4. 配置git远程库公钥
- 通过【设置】->【ssh公钥】进入码云的如下界面,黏贴公钥
- 把刚才在git bash里生成的公钥黏贴在公钥里点确定就好了
5. 编码设置
# 注释:该命令表示提交命令的时候使用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分支
代码示例
# 克隆 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 将本地版本库中当前分支推送到默认远程片库。
代码示例
# 推送所有变更的文件到缓存区
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 冲突
注意:在更新代码时,为了避免没有提交的文件和服务器文件产生冲突,可以先把 本地修改暂存起来,在提交完后,再弹出本地修改,流程如下。
# 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. 执行步骤# 查看分支提交日志 git log # 切换到 master 分支 git checkout master # 拣选某个develop上的提交 git cherry-pick commitID
2. 在拣选的时候出现冲突
3. 手动解决冲突,先用 git status 查看出现冲突的文件
4. 使用 vim 手动对冲突的文件进行修改
5. 解决后的界面如下
6. 使用 git add 提交修改
7. git cherry-pick --continue 弹出提交信息交互界面,修改后保存退出,cherry-pick操作完成
4. git merge冲突
当执行merge时,会出现冲突。Git会停止合并过程,并抛出冲突信息
# 合并分支时出现冲突 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. 修改最近一次提交注释内容
- 执行命令: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保存
然后查看日志,刚才的提交的信息就没了