-
git reset
可以用来commit,但本质上不是撤销操作,而是移动HEAD并且带上所指向的分支,重置head及分支
-
git reset 'HEAD^' 撤销最近的一次提交
-
git reset 'HEAD^^' 或者 git reset HEAD~2 撤销最近的2次提交
reset撤销操作不会丢失之前的提交,可以通过reset重置到原来的hash提交位置,如果找不到之前的提交,可以使用git reflog
-
git reflog
-
git reset 6d7cbfc(reset到之前的某次提交)
git reset进阶
- git reset 'HEAD^' --hard 尽量避免使用,会重置工作目录,丢失暂存
- git reset 'HEAD^' --soft 保留工作目录,与原分支差异放到暂存区
- git reset --mixed(默认) 保留工作目录,并且清空暂存区
-
-
git rebase
rebase变基,和merge同样都是进行合并操作的,将一个分支的内容都移至另一个分支上
工作流程: 1. 首先找到两个分支的共同祖先 2.然后对比当前分支与祖先的历次提交,进行提取相应的修改,并保存为临时文件,将当前分支指向目标基底,最后将之前存为临时文件的修改依次应用
效果实现,从图1变成图2的样子
如上图,如果以master为基底,需要切换到branch1上,然后执行git rebase master
然后再切回master, 执行
- git checkout master
- git merge branch
-
git tag
- 设置标签:
- git tag v1.0 (默认在最新的commit上)
- 查看标签
- git tag
- 给特定commit添加tag
- git tag v0.1 1094adl
- 添加带有说明的标签
- git tag -a v0.1 -m '描述信息' 1094adb
- 删除标签
- git tag -d v0.1
- 设置标签:
-
git 撤销
-
- 修改提交的信息
- git commit --amend 进入vim模式,也可以合并两次的提交
- git commit -m 'xxx' --amend 修正紧挨着的一次提交,与本次提交合并
- 取消暂存
- git reset HEAD a.txt (git add之后取消暂存)
- 撤销对文件的修改
- git checkout -- a.txt (add之前取消修改)
-
-
分支操作
- 新建
- git branch 分支名
- 切换分支
- git checkout 分支名
- 在当前分支的基础上新建分支
- git checkout -b 分支名
- 删除
- git branch -d 分支名
- git branch -D 分支名 强制删除
- 新建
-
取消合并
- git merge --abort
-
git reverse
在Git中,revert是用来恢复一些修改的。git revert 命令是用来还原一些操作,是一个撤销类型的命令。但它不是一个传统的撤销命令,因为整个过程中不会删除任何数据;相反,它将创建一个具有相反改动的新提交,从而撤销掉指定的提交。本质上看,git revert是一个新的提交。