-
使用
git reset --hard HEAD^
-
使用
git rebase -i HEAD~n
下面分别介绍下这两个方案有什么不同,和他们的使用场景 。
2.1 git reset --hard 丢弃最新的提交
代码提交后,需求发生变化导致之前提交的已经不合适,或者 代码提交后发现有严重bug,需要回滚可是使用这个命令:
git reset --hard HEAD^
tips:
1,HEAD^ 表示 最新提交HEAD位置往回数一个提交, 几个 ^ 就往回数几个提交;
2,HEAD~n 表示 新提交HEAD位置往回数n个提交
可以发现,reset
命令只能回滚最新的提交。
如果最后一次commit需要保留,而只想回滚之前的某次commit,reset
命令可能就无法满足了。(这个场景我第一次遇到的时候很是抓瞎)
2.2 git rebase -i 丢弃指定提交
针对想撤销中间某次commit的情况,可以使用如下的命令:
git rebase -i HEAD~2
tips:
1, `rebase -i`是 `rebase --interactive` 的缩写;
2, `git rebase -i` 不仅可以删除commit, 还可以修改commit。 具体的可以查看rebase 中提示的参数
输入git rebase -i HEAD~2
命令后,会出现一个编辑页面如下:
$ git rebase -i HEAD~2
drop e47fa58 提交11
pick 338955c 提交12
# Rebase 7f83da3..338955c onto 7f83da3 (2 commands)
# Commands:
# p, pick <commit> = use commit
# r, reword <commit> = use commit, but edit the commit message
# e, edit <commit> = use commit, but stop for amending
# s, squash <commit> = use commit, but meld into previous commit
# f, fixup <commit> = like "squash", but discard this commit's log message
# x, exec <command> = run command (the rest of the line) using shell
# b, break = stop here (continue rebase later with 'git rebase --continue')
# d, drop <commit> = remove commit
# l, label <label> = label current HEAD with a name
# t, reset <label> = reset HEAD to a label
# m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]
# . create a merge commit using the original merge commit's
# . message (or the oneline, if no original merge commit was
# . specified). Use -c <commit> to reword the commit message.
# These lines can be re-ordered; they are executed from top to bottom.
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
# Note that empty commits are commented out
编辑界面能够执行的操作,都有罗列出来:
`edit: 使用本次提交,在rebase到这次提交时候,会暂停下来等待修正`
`pick:使用本次提交,不操作修改`
`drop:删除这次提交`
`...`
这里的目标是删除倒数第二个提交,所以将倒数第二个提交前面修改为drop
, 然后退出编辑界面就可以了。
再通过 git log
查看提交历史的时候,就会发现e47fa58
的提交记录已经不见了。
- 回滚最新的提交 :
git reset
和 git rebase
命令都可以 - 回滚中间某次提交:
git rebase
可以, git reset
不可以 - 如果提交已经同步到远程仓库,需要使用
git push origin -f branch(分支名)
来将回滚也同步到远程仓库(master 分支谨慎使用 -f)
链接:https://www.jianshu.com/p/3c8bc17c69c6
一、假若你始终在一台电脑上提交上传代码,如果你需要回滚到指定commit,
1.直接Git bash打开本地项目所在文件夹,
2.然后输入指令Git log会查看提交历史,
3.找到并复制你要的commit hash值(图中蓝色线条所指)
4.输入指令git reset --hard 45c00a6924d2cd8781df1a2f21df17accaa442c3(commit hash 值)
HEAD为指针,HEAD -> dev 当前分支为dev,
为何只显示四条comm
git reset --soft 版本号 会将改动放在缓存区
git reset --mixed 版本号 不把改动放在缓存区
git resit --hard 版本号 回滚并且不会保存你之前修改过文件
推荐使用 git reset --soft 版本号
然后就可以重新commit了
首先需要安装插件:conditional-buildstep
A buildstep wrapping any number of other buildsteps, controlling their execution based on a defined condition (e.g. BuildParameter).
wiki:https://wiki.jenkins-...