Git: 常用小技巧

2,597 阅读4分钟

前言

在日常工作中,大家是不是遇到过这几种情况

  1. 在开发新的需求的时候,紧急让你去修改项目中某个问题,这就需要从自己的开发分支切到新的分支,那么这个时候,git是不允许你提交的,你必须将变更提交到版本库才可以切换分支。
  2. 一般我们的Git工作流是,一个需求一个开发分支,但是一个项目中的某个环境(生产除外)都会有一个公共的合并分支,既然是公共的合并分支,那肯定是多个人需要把自己的代码合并到公共分支后,在发布到环境上。那这样可能会存在一个问题,就是开发人员在合并分支的时候,不小心将自己的开发分支,合了公共开发分支,这样的话,你的代码中可能会存在其他需求的代码,那么在code review的时候就会出问题,因为别人的需求,可能不会跟你的需求一起上线,如果是刚开始合并完,及时发现还可以补救。

今天来给大家介绍一下以上两种情况的解决办法

问题一解决办法

git stash 命令能够将当前工作目录中尚未提交的所有更改(包括暂存区和未暂存的修改)临时存储到stash堆栈中,从而让用户在不影响当前工作进度的前提下,轻松切换到其他分支处理问题、合并代码或恢复到干净的工作状态。

常用命令

命令说明
git stash保存工作区内变更
git stash list查看当前git中存储的状态
git stash save 'message'保存当前工作区状态,并添加一个信息
git stash pop读取最近,并将工作区恢复到这个存储状态,并删除
git stash apply [stashName]读取某个存储记录,并将工作区恢复到这个存储状态,并删除

栗子🌰

可以看到当前工作区内修改了这个文件,当我切换分支的时候是切换不过去的,但git已经给了提示,提交你的更改或者使用stash

image.png

运行git statsh save 'message'命令

image.png 查看stash,安装vscode扩展Gitlen,可以看到此时我们刚刚保存的一条stash已经成功了,这个时候我们可以随意切换分支,合并等操作。

image.png

应用当前存储状态

image.png

image.png

image.png

可以看到工作区又恢复成,我们存储前的样子。

新增的文件(未跟踪)会不会被存储?会不会影响运程仓库?

  1. 新增的文件不会被存储,但我们可以先执行git add命令后,再去执行git stash,这个时候新增的文件也会被存储起来。或者运行git stash -u命令,添加-u选项后,会存储git未跟踪的文件。
  2. git stash命令纯是在自己本地操作,完全不用担心,会影响远程仓库,比如我在运行git stash pop恢复工作区状态后,还可以继续运行git commit -m git push git pull等一系列命令

以上是git stash的用法,当然也有一些高级的用法,比如一些附加选项,一些其他的命令以及它的原理,感兴趣的同学可以自行去了解一下,大家一起共勉...

问题二解决办法

前面已经提到,如果在你合并了公共开发分支后,及时回滚是没有问题的,下面我们主要看,在没有及时发现的情况下的补救办法。

git cherry-pick commit_id 命令,从一个分支选择性的将commit合并到另一个分支上。

常用命令

命令说明
git cherry-pick <commit_id>转移某个提交
git cherry-pick <commit_id>..<commit_id>转移m-n提交,不包含头尾
git cherry-pick <commit_id>^..<commit_id>转移m-n提交,包含头尾,^表示包含
git cherry-pick <commit_id> <commit_id>分散的情况下,可以选择转移多个提交

附加选项

  1. --continue 主要用于解决冲突后,继续转移操作
  2. --abort 主要终于终止合并操作

以上是git cherry-pick的用法,主要还是用于选择性的将commit转移到新的分支上,对于开发分支被污染有很大的作用。

最后

今天的分享就到这里了。希望能够帮助各位。如有不正确的地方,欢迎大家指正。😘

image.png