一、修改提交信息
1、执行 git rebase -i HEAD~n
示例:
git rebase -i HEAD~3
执行结果如下(列出了近三次的提交记录):
进入 vim编辑模式,选择需要修改的记录并将行首的pick
改为edit
(可简写为e
),然后保存并退出即可。如下:
保存并退出后,再执行
2、执行 git commit --amend
执行之后,进入 vim编辑模式,修改信息,然后保存并退出即可。如下:
3、执行 git rebase --continue
如下则成功:
注: 如果你修改了多条提交记录,需要重复2、3的操作多次
4、git push
注: 如果你更改的是远程仓库的提交信息,可使用 git push -f
强制push。
二、合并多次提交
方法同上,将被合并的记录行首的pick
改为squash
(简写为s
),即可
三、版本回退
1、命令、参数说明
git reset [--soft | --mixed | --hard] [HEAD]
命令 | 描述 |
---|---|
第一个参数 | |
--mixed | 取消add、取消commit。默认参数可省略 |
--soft | 取消commit |
--hard | 取消add、取消commit、取消文件修改(慎用!!!) |
第二个参数 | 以下所述的版本包括:本地提交(commit)和远程提交; |
HEAD | 当前版本(此版本之前的文件变化由第一个参数控制) |
HEAD^ 或HEAD~1 | 上一个版本 |
HEAD^^ 或HEAD~2 | 上上一个版本 |
HEAD^^^ 或HEAD~3 | 上上上一个版本 |
…… |
2、示例
a. 修改文件后
执行
git reset --hard HEAD
会撤销所有本地文件的修改,慎用。
b. 修改文件并 add
commit
后(此时本地会有一个版本HEAD)
执行
git reset HEAD^
可恢复到文件修改后的状态;
执行git reset --hard HEAD^
会撤销所有本地文件的修改,慎用。
四、撤销本地文件修改
1、撤销所有文件的修改
参照上一点
2、撤销指定文件的修改
查询当前文件状态 git status
根据提示知道可以用 git restore
命令来撤销指定文件修改
命令 | 描述 |
---|---|
git restore --worktree filepath | 表示撤销文件工作区的修改。默认参数可省略,也可简写为 -W |
git restore --staged filepath | 表示撤销暂存区的修改,将文件恢复到未 add 之前。参数可简写为 -S |
git restore -s HEAD^ filepath | 表示将文件撤销 commit,并撤销 add |
3、示例
a. 如上图示有两个已修改的文件,并且都没有添加到暂存区,如要撤销 index.html 的修改,可执行:
git restore src/index.html
b. 如果文件已经添加到暂存区,可执行以下命令将文件撤出暂存区:
git restore --staged src/index.html
c. 如果文件已经添加到版本库,可执行以下命令将文件撤销 commit,并撤销 add:
git restore -s HEAD^ src/index.html
注: 当然你可以先执行 git reset HEAD^
,再撤销指定文件的修改,最后再提交所有文件。
五、工作区、暂存区和版本库
定义 | 描述 |
---|---|
工作区 | 就是你在本地里能看到的文件目录。 |
暂存区 | 暂存区(stage)也叫作索引(index),一般存放在 .git/index 。 |
版本库 | 工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。 |
系列文章
Git专栏
Git使用(一):安装与配置
Git使用(二):创建项目并提交到远程仓库
Git使用(三):分支管理,创建分支、合并分支、合并分支的某一次提交等
Git使用(四):提交管理,修改提交信息、合并多次提交、版本回退、撤销本地文件修改等
Git使用(五):解决冲突以及如何避免冲突
SmartGit 安装及使用(一):安装及配置
SmartGit 安装及使用(二):工作界面介绍、提交代码以及防止代码冲突等操作
SmartGit 安装及使用(三):撤销提交、合并多次提交等操作
SmartGit 安装及使用(四):创建、合并分支以及解决冲突等操作
SmartGit 安装及使用(附录):注册非商业许可证
【Git】如何生成SSH key
【Git】.gitignore文件语法以及修改后无效的解决办法
【Git】Authentication failed for 错误解决
【Git】SSL certificate problem: unable to get local issuer certificate错误的解决办法
【Git】error: RPC failed; curl 92 HTTP/2 stream 0 was not closed cleanly: PROTOCOL_ERROR