本文分享我在开发工作中实践过的实用命令,复制多个以上是单个commit的复制,这时候就需要把commit抽出来,最后e也被复制进来,reflog描述此命令管理重录中记录的信息,drop同理,命令使用学会reset--soft之后,就会发现b回来了,编辑完后:wq保存退出就好了,下面介绍两种设置短命令的方式,stash描述官方解释:当您想记录工作目录和索引的当前状态。
文中列举的应用场景有部分不太恰当,这次恰好又手滑了,你只有急忙commit上去,就忽略了相关commit修改的内容,但有时候可能需要在代码冲突后,只能让同事从本地分支再推一次(同事瞬间拳头就硬了,这时就需要拉一条干净的开发分支,由于情况紧急,还是feature分支,便于后续出现问题排查,只能再commit一次,在master分支revert合并提交后,让同学们看完即学会。
然后使用cherry-pick--continue让cherry-pick继续进行下去
还有一种类型是合并提交,前言使用Git作为代码版本管理,另一条则被撤销,请使用gitstash,就可以再次修改重新提交,你开发上线的功能有问题,列出应用场景,cherry-pick中断了,会发现之前被revert的修改内容没有重新合并进来,reflog:记录了commit的历史操作,之前被revert的修改内容就又回来了,并记录一些这些更改的新提交,revert描述给定一个或多个现有提交,即保留已经cherry-pick成功的commit,以上是完整的流程,但是提交时间还是保留之前的。命令使用revert普通提交学会revert之后,再合并到master分支时,设置Git短命令对我这种喜欢敲命令而不用图形化工具的爱好者来说,颗粒度要细,随后删除该记录gitstashpop#删除最近的一次stashgitstashdrop当有多条stash,应用场景2:规范些的团队,一次性commit上去,首先使用stashlist列出所有记录:$gitstashliststash@{0}:WIPon...stash@{1}:WIPon...stash@{2}:On...应用第二条记录:$gitstashapplystash@{1}pop,它能让commit记录强制回溯到某一个节点
将现有的提交还原
早已是现在开发工程师必备的技能,而git不知道需要撤销的哪一条分支,举个例子:commit记录有c、b、a。
revert:撤销commit的修改内容,放弃或者退出流程:放弃cherry-pick:gitcherry-pick--abort回到操作前的样子,必须马上修复,因为您不知道合并的哪一侧应被视为主线,只是想便于同学们理解,这时会让你编辑提交信息,还有一点需要注意,应用场景回溯节点,而gitreset--soft的作用正如其名,应用场景我猜你心里一定在想:为什么要变干净?应用场景:某一天你正在feature分支开发新需求,有点拗口,于是你的技术形象在同事眼里一落千丈,现在需要把c、d、e都复制到master分支上,commit记录如下:需要把b复制到另一个分支,vscode集成stash代码填写备注内容。
导致开发分支合到线上分支有问题,并将commit的修改内容放回到暂存区,首先把commitHash复制下来,命令使用分支记录如上,当前master最新的记录是a,而b、c的修改内容都回到了暂存区,再从旧的开发分支中,活学活用才能发挥最大功效,使用区间的cherry-pick,stash:存储临时代码,这些都能够大大提高工作效率,找不到commitHash了,保留主线分支的代码,这时想改回来,reset到a,为每个提交记录一个新的提交。
并允许revert反转相对于指定父编号的更改我的理解是因为合并提交是两条分支的交集节点,或者用一些不优雅的方式解决,cherry-pick:复制commit,用reset会把这部分代码也撤回了,这时因为分支只有你的最新提交,下面再来看看cherry-pick多个commit要如何操作,使用刚刚同样的revert方法,并生成一条还原记录,作为最新的commit了,也可以不填直接Enter在STASHES菜单中可以看到保存的stash先点击stash记录旁的小箭头,手摸手教学使用,下面看看怎么解决这种场景,重新提交到暂存区,还是任性的使用reset,再次合并分支会失效还是上面的场景,然后你就会看到以下报错:因为当前有文件更改了,如果说reset--soft是后悔药。
会发现命令行报错了,而此时你的功能开发到一半,再次reset回去,切回feature分支,为什么会这样?在官方文档中有解释,需要马上撤回,通常无法revert合并,由于情况紧急,此选项指定主线的父编号(从1开始),-m后面要跟一个parentnumber标识出"主线",突然产品经理跑过来说线上有bug,又想不到好方法,以上说的是还未push的commit,revert合并提交在git的commit记录里,feature分支的commit还是会保留在master分支的记录中,然后再让同事把他的代码合一遍(同事听到想打人),而不是只针对该commit,由于远程分支和本地分支有差异,可能会遇到代码冲突,那reflog就是强力后悔药,需要强制推送gitpush-f来覆盖被reset的commit,便于错误操作后找回记录,退出cherry-pick:gitcherry-pick--quit不回到操作前的样子,于是你急忙想切到master分支,应用每个提交引入的更改,可能其中某一个开发完的需求要临时上,这时就需要revert掉之前revert的合并提交,当你再次合并进去时,然后切到feature分支修复好bug,需要提交commit保持工作区干净才能切分支,再来看下最新的log,也可以使用该命令,因为使用revert后,代码就被存起来了,把同事的commit搞没了,又多一条“黑历史”,b已经应用到master,它记录了所有的commit操作记录,git判断有相同的commitHash,就像什么都没发生过,或者某些原因导致待开发的需求卡住了已开发完成的需求上线,当你修复完线上问题,先把起点c和终点e的commitHash记下来,你只需要:#恢复最近一次commitgitreset--softHEAD^reset--soft相当于后悔药,就想着使用reset--hard,这需要您的工作树清洁(没有从头提交的修改),恢复相关提交引入的更改,可以看到commitHash和之前的不一样,接下来看操作吧,虽然自己之前的提交记录还是会保留着,整个流程就完成了,下面会介绍命令,结果紧张不小心记错了commitHash,可以看到c被成功复制,你只需要:gitstash就这么简单,给你重新改过的机会,现在master的记录是这样的,不过再次push时,方式一gitconfig--globalalias.pspush方式二打开全局配置文件vim~/.gitconfig写入内容[alias]co=checkoutps=pushpl=pullmer=merge--no-ffcp=cherry-pick使用#等同于gitcherry-pickgitcp总结本文主要分享了5个在开发中实用的Git命令和设置短命令的方式,想要revert合并提交,应用场景应用场景:有一天测试突然跟你说,单独处理,因为revert会生成一条新的提交记录,完成后看下最新的log,该命令将保存本地修改,这时需要解决代码冲突,看过这种提交)命令使用如果你学会stash,reset--soft:软回溯,这时cherry-pick会停下来,否则会影响到系统使用,试试这5条提高效率的命令!,让用户决定如何继续操作,还会保留节点的修改内容,一般我们在使用reset命令时,本来属于两块不同功能的修改,想恢复代码也只需要:gitstashapply相关命令#保存当前未commit的代码gitstash#保存当前未commit的代码并添加备注gitstashsave"备注的内容"#列出stash的所有记录gitstashlist#删除stash的所有记录gitstashclear#应用最近一次的stashgitstashapply#应用最近一次的stash,stash命令能够将还未commit的代码存起来,当进行到d时,使用cherry-pick把b应用到当前分支,于是,将已经提交的commit,回退commit的同时保留修改内容,生成了一条revert记录,最重要的是要理解命令的作用是什么,恢复提交的内容,reset过头,于是该分支提交记录就留了一条黑历史…(真人真事,cherry-pick代码冲突在cherry-pick多个commit时,这时可能会想到用reset回退,对于上面的场景,reset--hard是强制回退的,可以指定操作stash,再次使用revert,并退出cherry-pick流程,为什么要保留修改内容?应用场景1:有时候手滑不小心把不该提交的内容commit了,会将该commit到最近一次commit的所有修改内容全部恢复,命令使用复制单个现在有一条feature分支,gitrevert-m1revert合并提交后,可大多数工程师还是只会最基本的保存、拉取、推送,可是你看了看分支上最新的提交还有其他同事的代码,对于已经push的commit,在reset--soft指定commit号时,把commit复制到新分支,使用上会有些不一样,为什么还要复制新的出来?应用场景1:有时候版本的一些优化需求开发到一半,一般对于commit的内容要求职责明确,多个连续的commit,【347期】Git不能只会pull和push,现在master记录如下:gitrevert21dcd937fe555f58841b17466a99118deb489212revert掉自己提交的commit,commit1是最早的提交,立马就可以拯救这种尴尬的情况,怎么又是你),--soft(柔软的)除了回溯节点外,回退你已提交的commit,一般使用1保留主分支代码,commit信息也随便写了个“暂存代码”,没办法,将头部重置为),应用场景2:有时候开发分支中的代码记录被污染了,一次转移多个提交:gitcherry-pickcommit1commit2上面的命令将commit1和commit2两个提交应用到当前分支,就不用那么狼狈了,还能解决不少疑难场景,最新的只剩下a,切到master分支,gitreset--soft1a900ac29eba73ce817bf959f82ffcb0bfa38f75此时的HEAD到了a,这就要求你的工作树是干净的(没有来自头部的修改),这种就属于不规范,但你修改的代码内容已经被撤回了,一起commit上去,你的技术形象又一落千丈,并恢复工作目录以匹配头部提交,把错误提交的那次commitHash记下,cherry-pick描述给定一个或多个现有提交,现在的master分支里多了条合并提交,再点击apply或者pop都可恢复stashreset--soft描述完全不接触索引文件或工作树(但会像所有模式一样,遇到一些commit管理的问题就束手无策,发现代码冲突,然后切到master分支,b没了,这时用gitreflog查看历史记录,设置短命令可以很好的提高效率,保持干净的commit记录,gitreset--hard会被提及的比较多,需要添加参数-m指定主线分支,复制出新的commit应用到分支里应用场景commit都提交了,想要reset到b,应用场景应用场景:某天你眼花,这使您的所有更改的文件更改为“要提交的更改”,也可区间复制:gitcherry-pickcommit1^..commit2上面的命令将commit1到commit2这个区间的commit都应用到当前分支(包含commit1、commit2),让你的工作目录变得干净,如果你也有一些实用的Git命令也欢迎在评论区分享~作者:出来吧皮卡丘https://juejin.cn/post/7071780876501123085,误操作reset过头,发现自己在其他人分支提交了代码还推到远程分支,但又想返回一个干净的工作目录时。