lol爱游戏体育  
重庆 | 北京 | 深圳 | 上海 | 成都 | 宁波
全国服务热线: 400-023-8112 15111998399
lol爱游戏体育
lol爱游戏体育
公司新闻
常见问题
 

地址:重庆市石桥铺一城精英国际大厦12-2室
电话:023-61170788  
手机:15111998399(24小时)
全国免费热线:400-023-8112

公司新闻
   

lol爱游戏体育:Git 不能只会 pull 和 push试试这5条提高效率的

发布时间:2022-07-09 11:59:28 来源:lol爱游戏电子 作者:lol爱游戏网站

  原标题:Git 不能只会 pull 和 push,试试这5条提高效率的命令吧!

  使用 Git 作为代码版本管理,早已是现在开发工程师必备的技能。可大多数工程师还是只会最基本的保存、拉取、推送,遇到一些commit管理的问题就束手无策,或者用一些不优雅的方式解决。

  本文分享我在开发工作中实践过的实用命令。这些都能够大大提高工作效率,还能解决不少疑难场景。下面会介绍命令,列出应用场景,手摸手教学使用,让同学们看完即学会。

  官方解释:当您想记录工作目录和索引的当前状态,但又想返回一个干净的工作目录时,请使用git stash。该命令将保存本地修改,并恢复工作目录以匹配头部提交。

  stash 命令能够将还未 commit 的代码存起来,让你的工作目录变得干净。

  应用场景:某一天你正在 feature 分支开发新需求,突然产品经理跑过来说线上有bug,必须马上修复。而此时你的功能开发到一半,于是你急忙想切到 master 分支,然后你就会看到以下报错:

  因为当前有文件更改了,需要提交commit保持工作区干净才能切分支。由于情况紧急,你只有急忙 commit 上去,commit 信息也随便写了个“暂存代码”,于是该分支提交记录就留了一条黑历史…(真人真事,看过这种提交)

  当有多条 stash,可以指定操作stash,首先使用stash list 列出所有记录:

  完全不接触索引文件或工作树(但会像所有模式一样,将头部重置为)。这使您的所有更改的文件更改为“要提交的更改”。

  回退你已提交的 commit,并将 commit 的修改内容放回到暂存区。

  一般我们在使用 reset 命令时, git reset --hard 会被提及的比较多,它能让 commit 记录强制回溯到某一个节点。而 git reset --soft 的作用正如其名, --soft (柔软的) 除了回溯节点外,还会保留节点的修改内容。

  应用场景1:有时候手滑不小心把不该提交的内容 commit 了,这时想改回来,只能再 commit 一次,又多一条“黑历史”。

  应用场景2:规范些的团队,一般对于 commit 的内容要求职责明确,颗粒度要细,便于后续出现问题排查。本来属于两块不同功能的修改,一起 commit 上去,这种就属于不规范。这次恰好又手滑了,一次性 commit 上去。

  reset --soft 相当于后悔药,给你重新改过的机会。对于上面的场景,就可以再次修改重新提交,保持干净的 commit 记录。

  给定一个或多个现有提交,应用每个提交引入的更改,为每个提交记录一个新的提交。这需要您的工作树清洁(没有从头提交的修改)。

  应用场景1:有时候版本的一些优化需求开发到一半,可能其中某一个开发完的需求要临时上,或者某些原因导致待开发的需求卡住了已开发完成的需求上线。这时候就需要把 commit 抽出来,单独处理。

  应用场景2:有时候开发分支中的代码记录被污染了,导致开发分支合到线上分支有问题,这时就需要拉一条干净的开发分支,再从旧的开发分支中,把 commit 复制到新分支。

  需要把 b 复制到另一个分支,首先把 commitHash 复制下来,然后切到 master 分支。

  完成后看下最新的 log,b 已经应用到 master,作为最新的 commit 了。可以看到 commitHash 和之前的不一样,但是提交时间还是保留之前的。

  上面的命令将 commit1 和 commit2 两个提交应用到当前分支。

  在 cherry-pick 多个commit时,可能会遇到代码冲突,这时 cherry-pick 会停下来,让用户决定如何继续操作。下面看看怎么解决这种场景。

  切到 master 分支,使用区间的 cherry-pick 。可以看到 c 被成功复制,当进行到 d 时,发现代码冲突, cherry-pick 中断了。这时需要解决代码冲突,重新提交到暂存区。

  给定一个或多个现有提交,恢复相关提交引入的更改,并记录一些这些更改的新提交。这就要求你的工作树是干净的(没有来自头部的修改)。

  应用场景:有一天测试突然跟你说,你开发上线的功能有问题,需要马上撤回,否则会影响到系统使用。这时可能会想到用 reset 回退,可是你看了看分支上最新的提交还有其他同事的代码,用 reset 会把这部分代码也撤回了。由于情况紧急,又想不到好方法,还是任性的使用 reset,然后再让同事把他的代码合一遍(同事听到想打人),于是你的技术形象在同事眼里一落千丈。

  因为 revert 会生成一条新的提交记录,这时会让你编辑提交信息,编辑完后 :wq 保存退出就好了。

  再来看下最新的 log,生成了一条 revert 记录,虽然自己之前的提交记录还是会保留着,但你修改的代码内容已经被撤回了。

  在 git 的 commit 记录里,还有一种类型是合并提交,想要 revert 合并提交,使用上会有些不一样。

  通常无法 revert 合并,因为您不知道合并的哪一侧应被视为主线。此选项指定主线开始),并允许 revert 反转相对于指定父编号的更改

  我的理解是因为合并提交是两条分支的交集节点,而 git 不知道需要撤销的哪一条分支,需要添加参数 -m 指定主线分支,保留主线分支的代码,另一条则被撤销。

  还是上面的场景,在 master 分支 revert 合并提交后,然后切到 feature 分支修复好 bug,再合并到 master 分支时,会发现之前被 revert 的修改内容没有重新合并进来。

  这时就需要 revert 掉之前 revert 的合并提交,有点拗口,接下来看操作吧。

  如果说 reset --soft 是后悔药,那 reflog 就是强力后悔药。它记录了所有的 commit 操作记录,便于错误操作后找回记录。

  应用场景:某天你眼花,发现自己在其他人分支提交了代码还推到远程分支,这时因为分支只有你的最新提交,就想着使用 reset --hard ,结果紧张不小心记错了 commitHash,reset 过头,把同事的 commit 搞没了。

  没办法, reset --hard 是强制回退的,找不到 commitHash 了,只能让同事从本地分支再推一次(同事瞬间拳头就硬了,怎么又是你)。于是,你的技术形象又一落千丈。

  对我这种喜欢敲命令而不用图形化工具的爱好者来说,设置短命令可以很好的提高效率。下面介绍两种设置短命令的方式。

  文中列举的应用场景有部分不太恰当,只是想便于同学们理解,最重要的是要理解命令的作用是什么,活学活用才能发挥最大功效。

  最近写了一套 6000 页的 Java 学习手册,以及珍藏四本 Java 人必读4大神器,分享到知乎已经 3 万赞了!

 
 
友情链接:

XML地图|版权所有:{lol爱游戏体育 地址:重庆市石桥铺一城精英国际大厦12-2室 电话:023-61170788 手机:15111998399(24小时)
《中华人民共和国电信与信息服务业务经营许可证》编号:黑ICP备30276541号-1
重庆网站建设|lol爱游戏体育提供技术支持|网站地图

lol爱游戏体育

公网安备 50010702500980号