【转】Git如何在不提交当前分支的情况下切换到其它分支进行操作——git stash

假如现在的Bug你还没有解决,而上边又给你派了一个新的Bug,而这个Bug相比较现在正在苦思冥想的Bug比较容易解决。

你想先解决新的Bug,可是之前的Bug还没有解决完而不能提交。怎么办?

解决方法:在其他分支上另开炉灶解决。

首先你需要将此刻正在解决Bug的当前分支“储藏”起来。例假如此时正在你在当前分支dev上已进行了Bug修改但还未提交。

此时你想去解决刚派下来的另一个Bug。而你需要在master分支上去修复这个Bug,第一步就需要先切换到master 分支。当你执行 $ git checkout master 命令的时候,将提示出错:

error: Your local changes to the following files would be overwritten by checkout:
        readme.txt
Please commit your changes or stash them before you switch branches.

(请在切换分支之前提交您的更改或隐藏它们)

因为当前的分支dev 最初也是从master 分支上衍生出来的。而此时你要再从该分支上切换到其主分支。那么你需要先把该dev分支上的改动提交后才能切换,但是该dev分支上还没有完成全部的修改,你不想提交。那么此时你就要选择 stash 它们(你在当前分支上改动的却没有提交commit的内容)。

所以第二步,在当前分支上执行  $ git stash 命令。将当前分支存起来,id为 8528ea2 s

这时候再执行 $ git status 命令,显示没有东西需要提交,这个时候你就可以切换到master分支上了。

接着就可以在主分支master上创建并切换到新的分支去修复另一个Bug了。

那修改完那个Bug也提交后,就该回到dev 分支上去继续修改那个未完成的Bug。

执行  $ git checkout dev 切换到 dev 分支,这个时候执行 git status 命令仍旧显示没有东西需要提交。毕竟我们前边已经成功将dev上未提交的改动给“隐藏“了,这时,用  $ git stash list  命令去查看我们“存储”的列表。

会发现id 为  8528ea2 s 的储藏项目在列表中,我们需要将其恢复,有两个办法:

一、用 $ git stash apply 命令恢复,但是恢复后,stash内容并不删除,这时候再执行  $ git stash list 命令,id 为  8528ea2 s 的储藏项目还会在列表中,你需要用 $ git stash drop 来删除;

注意: 如果有一个分支上多个 stash,如果需要恢复指定的 stash ,可以在命令尾部加id,如  $ git stash apply [email protected]{0},同样删除指定 stash 项目则执行如 $ git stash drop [email protected]{1}  。

二、用  $ git stash pop  命令,恢复的同时把 stash 存储列表的内容也删了。这时候再执行  $ git stash list 命令,id 为  8528ea2 s 的储藏项目不会在列表中。

此时再查看 $ cat <filename>  会发现之前的改动还存在,且执行 git status 就会继续显示该分支上有改动未提交。
from:https://blog.csdn.net/asheandwine/article/details/79003270

原文地址:https://www.cnblogs.com/xuan52rock/p/12652068.html

时间: 2024-11-02 08:19:02

【转】Git如何在不提交当前分支的情况下切换到其它分支进行操作——git stash的相关文章

使用git提交代码--在不切换分支的情况下向不同的分支提交代码

我们都会提交代码,尤其是当项目的分支比较多的时候,我们就会向不同的分支提交代码,这时候,如果来来回回切换分支修改了之后在提交,那么会很费时间的,一天也改不了几个bug. 在一个分支上修改了代码,先向一个分支进行提交  比如;本地B-1分支,提交合并到B分支上面去 然后关键一步:选择Cherry-pick  意思是  炼选 最后,将自己本次修改的代码选择另外一个目标分支进行提交 依次类推,这样就比较方便了 原文地址:https://www.cnblogs.com/dongyaotou/p/1212

GIT 如何在不提交Commit的情况下切换分支

最近遇到一个问题,事情是这样子的,刚刚接到客户说他的项目有问题,于是就打开本地的源码查看经过排查确定了问题,于是就开始进行修正工作 将问题修复好准备提交到git的时候发现当前的分支是不对的,但问题是我已经在当前分支了作了大量修改,如果要切换分支则必须先要将修改过的文件先提交 那么现在问题来了:如何在不提交commit的情况下来切换分支呢? 最后通过查看Pro Git文档了解到Git中有一个stash功能可以实现 6.3 储藏(Stashing) 来源: <http://git.oschina.n

git写个脚本提交

因为是ios项目,就我自己一个人写的.git初级使用阶段,感觉敲指令太麻烦,所以尝试写个sh脚本. 内容如下: #!/bin/sh cd /Users/username/Desktop/workspace/verycloud/ios/projlsgit branchgit add -Aecho "输入您的commit文字"read $agit commit -m "shell提交:$a" echo "需要push到:b-someone-edit分支则输入y

git恢复到上次提交

4个区 5种状态 未修改(Origin) 已修改(Modified) 已暂存(Staged) 已提交(Committed) 已推送(Pushed) 检查修改 已修改,未暂存(检查工作区与暂存区间的差异) git diff 已暂存,未提交(检查暂存区与本地仓库间的差异) git diff --cached 已提交,未推送(检查本地仓库与远程仓库间的修改) git diff master origin/master ## origin/master 为远程仓库 撤销修改 已修改,未暂存(撤销工作区的

Git拉取和提交代码的基本步骤

1 现在本地初始化一个厂库:git init 2.配置好远程url地址:git remote add origin git@XX.XXX.XXX.XX:test/pytest.git 3 直接拉代码:git pull origin dev24 查看代码修改状态:git status5 创建一个你要上传的分支(会同时切换到该分支):git checkout -b dev26 先提交到本地分支:git add -A7 提交说明:git commit -m "修改代码说明"8 再推送到远程分

Git分支管理——创建、合并、删除分支

前言: 几乎所有的版本控制都以某种形式支持分支.使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线. Git的分支模型成称为它的"必杀技特性",也正因为这一特性,使得Git从众多版本控制系统中脱颖而出.Git处理分支的方式是难以置信的轻量,创建新的分支这一操作是秒级完成的,并且在不同分支之间的切换操作也是一样便捷. Git的分支,其实本质上仅仅是指向提交对象的可变指针.Git的默认分支是master.在多次提交操作之后,其实我们已经有一个指向最后那个提交对象的mast

git与eclipse集成之创建及切换个人本地分支

创建个人本地特性分支,并进行编码 弹出选择分支的窗口,选择要切换的个人特性分支(备注:根据远程个人特性分支创建本地个人特性分支) 点击OK,Branch name:分支名称与远程分支名称相同,不需要修改.默认勾选Checkout new branch,即创建完分支后,并切换到该分支. 点击finish,完成个人本地特性分支的创建. 从工程名可以看到已经切换到新创建的本地个人分支 从Branches/Local可以看到本地多了一个新分支,并且已经切换到该分支 从References可以看到HEAD

删除本地分支,并重新拉取远程分支复制到本地

1. 删除本地分支 假设想要删除本地的分支temp,并且当前处在temp分支上,首先需要切换到别的分支(假设切换到develop分支): git checkout develop //切换到develop分支 git branch //此时处在develop分支 git branch -D temp //删除本地temp分支 2.重新拉取远程仓库代码,并自动创建分支 git fetch 会将远程代码的更新(commit)拉取到本地. git fetch origin temp:temp //拉取

git合并某次提交到某个分支

有的时候,在develop分支开发,是大家公用的开发分支,但是只想合并自己提交的到master,如何操作呢?那就要用cherry-pick了. 语法 git  cherry-pick commitid 首先,git log查看自己提交的log,找到版本号,如最近的版本号是 ee3c72 然后,切换到想要合并的分支,如想把develop的合并到master,切换到master,执行 git  cherry-pick ee3c72,执行完之后,提交就会在master上体现了,然后push,就可以了.