[Git废弃提交]需求做一半,项目停了,我该怎么废弃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
就彻底消失了,无法还原。
具体用法,这里不在再次介绍,可以去看前面的课程。
链接:https://juejin.cn/post/7206116224840695866
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。