前期准备
git log确认要回滚的版本的commit编号
开始
回滚的奥秘是使用git reset
可以从git文档中看到
git reset [-- soft|- -混合[-n ]|--hard|--merge|--keep ] [-q ] ]
使用时,也可以使用
git reset-- soft8ff 24 a 6803173208 F3 e 606 e 32 dfcf 82 db9a c84 d 8
git reset --hard XXX
git reset [DESCRIPTION-option] []
我只使用过soft和hard,所以我要记录这两个(
soft (软)众所周知,git只会将头标头指向指定的commit编号,而不会更改索引文件或工作树的内容。 此命令将所有更改文件保留为“Changes to be committed”(变更为建议)
白字:您在项目中的更改将被保留
重置hard (强硬)、索引和工作树。 因为你在项目上没有所有的改动,所以谨慎使用hard选项……不然,你无知震惊的“卧床不起,我的代码怎么不见了? ”
混合将重置索引,但不重置工作树。 进行更改时,将保留未跟踪的文件(在工作树中)。 git的默认选项
如果你认为这三个不满足你的需要,那就去看git文档吧。 我真的不擅长翻译.
-合并
resetstheindexandupdatesthefilesintheworkingtreethataredifferentbetweenand ` head `,butkeepsthosewhicharedifferentbetwentheethed . ifafilethatisdifferentbetweenandtheindexhasunstagedchanges,reset is aborted。
inotherwords---- mergedoessomethinglikeagitread-tree-u-m,butcarriesforwardunmergedindexentries。
--keep
resetsindexentriesandupdatesfilesintheworkingtreethataredifferentbetweenand ` head `.ifafilethatisdupdatesfetweenandhas
背景
今天为什么要写这个? 因为项目使用了git submodule,所以在真正的漏洞里,第一次得到的人,真的会遮住脸。
其他同事在product上推送时,覆盖了前面的人的commit内容。 这个坑爹的原因还没找到。
本来,推送时,一定会进行git pull。 当pull集成到本地dev中时,它一定会更新或冲突。 但是,TNND真的很不可思议,拿着上面提到的commit上了推送。 这个特别的饼干是什么? 如果问题的旧版本package.json包名错了,项目就起不来了,这个锅又到了我头上。 大人,我不当啊……
目前的解决方案有两种。
回滚到上一个正确的位置。 让commit再次提交错误的内容
继续这个坏的。 我老家再修好一次,再推一次
made,一个人也不想选……
系统开销