前言
在日常工作中,大家是不是遇到过这几种情况
- 在开发新的需求的时候,紧急让你去修改项目中某个问题,这就需要从自己的开发分支切到新的分支,那么这个时候,git是不允许你提交的,你必须将变更提交到版本库才可以切换分支。
- 一般我们的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
运行git statsh save 'message'命令
查看stash,安装vscode扩展Gitlen,可以看到此时我们刚刚保存的一条stash已经成功了,这个时候我们可以随意切换分支,合并等操作。
应用当前存储状态
可以看到工作区又恢复成,我们存储前的样子。
新增的文件(未跟踪)会不会被存储?会不会影响运程仓库?
- 新增的文件不会被存储,但我们可以先执行
git add命令后,再去执行git stash,这个时候新增的文件也会被存储起来。或者运行git stash -u命令,添加-u选项后,会存储git未跟踪的文件。 - git stash命令纯是在自己本地操作,完全不用担心,会影响远程仓库,比如我在运行
git stash pop恢复工作区状态后,还可以继续运行git commit -mgit pushgit 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> | 分散的情况下,可以选择转移多个提交 |
附加选项
--continue主要用于解决冲突后,继续转移操作--abort主要终于终止合并操作
以上是git cherry-pick的用法,主要还是用于选择性的将commit转移到新的分支上,对于开发分支被污染有很大的作用。
最后
今天的分享就到这里了。希望能够帮助各位。如有不正确的地方,欢迎大家指正。😘