代码刚提交暂存区,组长突然要我把新增代码 Commit 另一分支怎么办?
1. 背景
最近刚换公司,上家公司使用 svn 进行代码的版本控制,而现在公司使用的是 git 。因为自己平常也有使用 git,所以基本使用操作还是没有问题的。
最近需要做的新功能需求讨论了一周,这期间我提前在 master 分支上编写大量基础代码。在正式开始开发时,领导跟我说你切换到 xx 分支上进行开发吧。咱们采用的是 Git Flow 的方式进行代码版本控制的,分支我已经建好了。 于是我就跟组长说:我已经编写了好多代码了在 master 分支上了。 组长说:那就把你新搞的代码拷贝到新的分支上吧。
Oh My God! 代码有好多,复制粘贴倒是可以,但是一是慢二来就是可能会覆盖别人的代码。于是查看 git 官方手册发现一个神奇的命令 ``git stash
``瞬间完美解决。
2.案例还原演示
这里我通过简单操坐来还原具体案例场景:在 stashOper 项目上已经有一个 Hello.java 文件提交,然后将在 master 分支上将已经提交到暂存区的 ForOper.java 文件复制到 b1 分支上。接下来开始案例场景还原。
首先创建包含已经 commit 的 Hello.java 文件的 stashOper 项目。 具体操作如下:
创建空的 stashOper 目录并在改目录下执行 ``git init
``
cd:进入文件夹命令
mkdir:创建文件夹命令
git init:创建 git 仓库
创建 Hello.java 文件
touch:创建文件命令
vim:编辑文件命令,这里具体使用不在进行阐述。
添加一个打印 hello java 的简单程序,具体代码如下:
验证 Hello.java 程序。
将 Hello.java 通过 ``git add
`添加到暂存区,然后在通过
`git commit
``添加到本地仓库。
git add:将代码添加到暂存区
git commit:将代码添加到本地仓库
创建新的分支通过 ``git checkout -b 分支名称
``具体操作如下:
也可以通过 git branch 分支名称 来创建分支,这个命令不会切换的新建的分支上。
通过 git checkout master 切换到 master 分支,然后创建 ForOper.java 文件并添加如下代码:
验证 ForOper.java 程序,然后通过 git add 将他们添加到暂存区中。这里操作就不在进行演示,可以参照添加 Hello.java 到本地仓库的操作。
接下来要注意了,使用 git stash save 注释内容 将 ForOper.java 先保存起来。具体操作如下:
切换到 b1 分支,通过 git checkout 命令。
通过 git status 查看目前 b1 分支状态,如下图所示 b1 分支暂存区和本地仓库没有任何文件。
通过 git stash list 查看在 master 上保存的文件内容。具体如下图:
最后通过 git stash apply 将 master 分支上暂存区的内容拷贝到 b1 分支上。如下图所示在 b1 分支上暂存区已经有 ForOper.java 了,执行 git commit 就可以将其提交到 b1 分支上了。
git stash apply :使用存储,但不会把存储从存储中进行删除,直接执行 git stash apply 默认是用第一个,即 stash@{0},如果要使用具体的存储,git stash apply stash@{$num} , 比如第二个:git stash apply stash@{1}
3.总结
最后介绍一下 git 存储 命令 git stash 经常使用操作如下:
git stash: 添加不带标签的存储,不建议使用不方便查找。
git stash save "标签内容":添加带标签的存储。
git stash list:查看存储列表。
git stash apply:使用存储但是不会删除。例如:git stash pop apply@{0}
git stash drop :将存储从列表中删除。例如:git stash pop drop@{0}
git stash pop:使用存储,使用后会自动删除已经使用的存储。例如:git stash pop stash@{0}
git stash clear:删除所有的存储。
4.参考文献
https://git-scm.com/book/zh/v2/Git-%E5%B7%A5%E5%85%B7-%E5%82%A8%E8%97%8F%E4%B8%8E%E6%B8%85%E7%90%86
https://www.cnblogs.com/zndxall/archive/2018/09/04/9586088.html
版权声明: 本文为 InfoQ 作者【zhuoqianmingyue】的原创文章。
原文链接:【http://xie.infoq.cn/article/162da5864d70a809ce58fa20a】。文章转载请联系作者。
评论