Git 切换分支不想提交代码该如何处理

本文介绍在Git中如何优雅地切换分支而不提交当前工作进度的方法,通过使用stash命令临时保存更改,以便稍后恢复。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Git 切换分支不想提交代码该如何处理

Git 切换分支不想提交代码该如何处理 - 星云惊蛰 - 博客园

在B分支工作时,突然来了个紧急需求,需要切到C分支作业。但并不想提交B的代码该如何处理呢?
可以把代码暂时提到缓存区,切换到C分支进行编写,完成需求提交代码后,切回B分支读取缓存即可。
附缓存指令:

git stash // 缓存
git stash save 'message' // 推荐使用这个 可以根据存取的message分辨缓存
git stash list // 缓存列表
git stash pop // 读取缓存的最后一个并从list中删除该缓存
git stash apply stash@{n} // 读取指定缓存 不会自动删除 stash@{n} 为list中 你所要读取的缓存的序号
git stash drop stash@{n} // 手动删除指定缓存
// 查看缓存的时间
git stash list --date=relative
git stash list --date=short
git stash list --date=local

git stash list stash@{n}为序号 on 后面是分支名引号里面是save存储的message

假如现在的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 stash@{0},同样删除指定 stash 项目则执行如 $ git stash drop stash@{1}  。


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

此时再查看 $ cat <filename>  会发现之前的改动还存在,且执行 git status 就会继续显示该分支上有改动未提交。

### 问题分析 在使用 Git 切换分支时,如果发现代码消失,通常是因为当前工作区的更改未被提交或暂存。切换分支会导致这些更改丢失,除非明确保存它们。VSCode 提供了便捷的方式来处理这种情况。 --- ### 解决方案 #### 1. 使用 `git stash` 暂存更改 在切换分支之前,可以使用 `git stash` 将当前分支上的未提交更改保存到一个临时区域[^1]。这样可以确保在切换分支后不会丢失任何代码。待需要恢复这些更改时,可以通过 `git stash pop` 命令将其重新应用到当前分支。 ```bash git stash ``` #### 2. 在 VSCode 中操作 `git stash` VSCode 内置了对 Git 的支持,可以直接通过图形界面完成 `git stash` 操作: - 打开 **源代码管理** 视图(快捷键:`Ctrl + Shift + G`)。 - 如果有未提交的更改,点击右上角的 **...** 按钮,选择 **Stash Changes**。 - 切换分支后,若需要恢复更改,再次打开 **源代码管理** 视图,找到 **Stashed Changes** 部分,点击 **Pop Stash**。 #### 3. 确保未丢失的更改已提交 如果不想使用 `git stash`,可以在切换分支前将更改提交到当前分支。这样可以避免切换分支代码消失的问题。 ```bash git add . git commit -m "保存当前更改" ``` #### 4. 检查分支切换后的状态 如果已经切换分支并发现代码消失,可以检查 `git stash list` 是否存在未应用的更改: ```bash git stash list ``` 如果有未应用的更改,可以使用以下命令恢复: ```bash git stash pop ``` #### 5. 删除分支时的注意事项 如果问题是由于删除分支导致的代码丢失,需要注意 `git branch -d <branch_name>` 只会删除已经被合并的分支[^2]。如果分支未被合并,可以强制删除,但需谨慎操作: ```bash git branch -D <branch_name> ``` --- ### 注意事项 - 在切换分支前,务必确认所有更改已被提交或暂存。 - 如果不确定更改是否会被保留,可以先创建一个新的分支来保存当前的工作状态: ```bash git checkout -b backup-branch ``` - 使用 `git status` 检查当前工作区的状态,确保没有未处理的更改。 --- ### 示例代码 以下是完整的流程示例: ```bash # 检查当前状态 git status # 暂存更改 git stash # 切换分支 git checkout <target_branch> # 恢复更改 git stash pop ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值