本节课会分享如何抛弃现已不要的
commit
在实践开发中咱们要拥抱改动。咱们都知道需求它是很不安稳的,在实践开发进程中会常常改动。常常会遇到一个需求,现已开端进入开发阶段了,开发到一半的时分说这个功用不需求了。甚至会呈现咱们现已完成某一个功用,然后被告知,这个功用被砍掉了。
那么针对这种代码现已写了,现在要抛弃的情况咱们应该怎样操作呢?
当然,假如这个功用都在一个单独的分支上,且这个分支只要这个功用的代码,那么能够直接抛弃这个分支。(这也是为什么会有多种Git作业流的原因,不同的软件需求场景,需求合作不同的作业流。)
代码还没有提交
假如代码还在本地,并没有提交到库房上。能够用reset
来重置代码。
git reset
是将当时的分支重设(reset
)到指定的commit
或者HEAD
(默认),而且根据参数确认是否更新索引和作业目录。
# 重置暂存区的指定文件,与上一次commit坚持一致,但作业区不变
git reset [file]
# 重置暂存区与作业区,与上一次commit坚持一致
git reset --hard
# 重置当时分支的指针为指定commit,一起重置暂存区,但作业区不变
git reset [commit]
# 重置当时分支的HEAD为指定commit,一起重置暂存区和作业区,与指定commit一致
git reset --hard [commit]
# 重置当时HEAD为指定commit,但坚持暂存区和作业区不变
git reset --keep [commit]
其实reset
也能够指定某个commit
,这样就会重置到对应的commit
,该commit
之后的commit
都会丢掉。假如你无法确认这些commit
中是否有需求保存的commit
,就不要这样操作。
假如代码现已提交
假如代码现已提交了,且提交的分支上还有其他的代码。那么操作起来就比较麻烦。咱们需求用revert
来删去。
revert
git revert
指令用来「吊销某个现已提交的快照(和reset
重置到某个指定版别不一样)」。它是在提交记录最后面加上一个吊销了更改的新提交,而不是从项目前史中移除这个提交,这避免了Git丢掉项目前史。
# 生成一个吊销最近的一次提交的新提交
git revert HEAD
# 生成一个吊销最近一次提交的上n次提交的新提交
git revert HEAD~num
# 生成一个吊销指定提交版别的新提交
git revert <commit_id>
# 生成一个吊销指定提交版别的新提交,执行时不翻开默认编辑器,直接使用 Git 自动生成的提交信息
git revert <commit_id> --no-edit
比如我现在的dev
分支,最近3次提交是”10″,”11″,”12″。
我现在要11这个提交去掉,我就直接revert
“11” 这个commit
。
运行后,他会呈现一个抵触比照,要求我修正完成后从头提交。(revert
是添加一个吊销了更改的新提交)
这个提交,会呈现”10″和”12″的比照。
修正完比照后,咱们commit
这次修正。
看下日志,咱们能够看出,revert
是新做了一个吊销代码的提交。
吊销(revert
)被设计为吊销公共提交的安全方法,重设(reset
)被设计为重设本地更改。
因为两个指令的目的不同,它们的完成也不一样:重设完全地移除了一堆更改,而吊销保存了原来的更改,用一个新的提交来完成吊销。「千万不要用 git reset
回退现已被推送到公共库房上的提交,它只适用于回退本地修正(从未提交到公共库房中)。假如你需求修复一个公共提交,最好使用 git revert
」。
rebase
前面课程说过,rebase
是对已有commit
的重演,rebase
指令也能够删去某个commit
的。他和reset
一样,删去掉的commit
就彻底消失了,无法复原。
详细用法,这里不在再次介绍,能够去看前面的课程。
开启生长之旅!这是我参与「日新计划 2 月更文应战」的第 13 天,点击查看活动概况