Git撤销指定commit并更新远端仓库
Git撤销指定commit并更新远端仓库
一、撤销指定commit
1.首先执行git log
命令,查看git历史提交以及commit信息:
由于需要脱敏,所以截图可能看得马赛克比较多,需要关注的就是上面的commit后跟的id,以及HEAD当前指定的位置。
现在我希望能将最新的这个commit,也就是commit id开头为19e589bba…的commit 执行撤销,并将撤销更新到远端仓库上,要如何实现呢?
2.执行git reset —soft <commit id>
命令,这里的commit id是你希望HEAD新指向的commit id。
比如,本次我想撤销的是id开头为19e589bba…的commit,则我的git reset命令就需要这样写:
git reset --soft 23818c51cc7d0aefbad8ea...
执行上面的命令后,会显示提示:
HEAD is now at 23818c51c [Improve] [connector-file-base] ....
说明现在的HEAD指针已经指向了我们指定的commit,就不是原先的commit,从而实现了我们本案例的目的:对最新的commit进行撤回。
3.执行git log
命令验证commit历史提交
可以看到,现在HEAD已经指向了我们指定的commit。
4.为了在远端仓库同步更新,需要将撤销进行push。执行:
git push --force origin <branch_name>
branch_name为你要提交到的远端仓库分支名。至此,撤销commit的过程就完成了,可以在远端仓库发现最新的commit被撤回了。
需要注意的是,—force可能需要慎用,比如提交的代码有冲突的话,—force可能会将别人的代码给覆盖掉。
二、git reset 参数
git reset 命令有以下几个主要的参数:
–soft:当使用这个参数时,Git会将HEAD指针移到指定提交,但是不会改变索引(指暂存区)和工作目录,你的所有改动都会从暂存区(索引)和工作目录转移到未暂存的更改。这就意味着,本地代码不会变化,我们使用git status依然可以看到,同时也可以git commit提交。
–mixed:这是git reset的默认行为,如果不提供任何参数这就是它会做的。此参数会将HEAD指针移到指定提交,更新索引(指暂存区),但是不会触碰工作目录。这意味着你在提交以前作了的所有改动将会转移至未暂存的更改。
–hard:这个参数将HEAD指针移到指定提交,更新索引(暂存区),并且更改工作目录以匹配指定提交。如果你使用–hard参数并指定一个提交,那么在指定提交之后做的所有更改都将会丢失(代码也回到了那个版本时的代码)。
注意:git reset 是一个强大且可能有害的命令,所以在使用之前应当明白其后果并且要注意安全地使用。