如何干净地切换到一个分支

Posted 袖子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何干净地切换到一个分支相关的知识,希望对你有一定的参考价值。

一、如何保持一个干净的分支

当执行命令 git  checkout develop 切换到develop分支时,如果之前的分支对文件有修改,也会将修改的文件信息带到develop分支上来。怎么干净地切换到develop分支?

方案一:git reset HEAD -- hard

方案二:git stash

方案三:git commit

场景描述

当前分支:alanchen。

在alanchen分支上修改了几个文件,如,A、B、C。

切换到develop分支时,A、B、C这三个文件的修改也会带过来。用 git status 查看,可以看到A、B、C这三个文件有修改。

1. 方案一适用场景

想切换到develop分支时是干净的,如果这些修改不再需要,可以直接丢弃的话,采用这种方案。

//执行以下命令
git checkout develop

git reset HEAD --hard

//特别注意:alanchen分支上A、B、C的修改也没有了

2. 方案二适用场景

如果这些修改还需要,只是想临时切换到develop分支,那么采用第二种方案。

git stash

git checkout develop

3. 方案三适用场景

如果是同时开了两份分支在开发,在当前分支上的修改都需要保留,希望切换到另外一个分支去开发,那么采用第三种方案。

#添加到git版本库
git add .

#提交
git commit -m "message"

#切换分支
git checkout develop

二、git stash详解

当你在git分支中改代码时,接到任务需要修复一个bug,你需要在当前分支外新建一个分支来处理bug,当然不能把你刚才写的代码带到那个分支,因为你做的新功能还没测,更不能提交。所以你需要git stash命令暂存修改(git stash帮助开发人员暂时搁置当前已做的改动,倒退到改动前的状态):

#暂存
git stash save "备注"

#查看stash情况
git stash list

当你修完bug想要继续写你的新功能时,就需要git stash pop(前提是你的stash在栈顶,git stash会将你的修改压入一个栈中,你如果git stash暂存了很多次,你需要指定pop版本,可以使用git stash apply stash@{1})。其中stash@{1}是啥?你可通过git stash list查看到stash@{1}是你stash内容的版本。

注意:并不是每次git stash都要先git add .的。当你的修改的都是原有文件,那是不需要在git stash之前进行git add 操作的,但是如果你所作的修改涉及到了本次才新建的文件,那么此时git stash之前是要做git add .的。因为新建的文件还没有进入版本控制库,需要add操作才能将新建的文件添加进库。如果在你新建之后直接git stash,未作git add .操作。那么新建文件将仍然保留在工作区,进栈内容不包含新建的文件。

当需要拉取远端文件,但又不想提交正在修改的文件时,可以使用git stash 命令将当前的工作区保存(藏匿)起来,等pull 完后再还原。

#暂存修改工作区
git stash  

#拉取远端文件
git pull  

#将工作区还原
git stash pop stash@{0} 

如果还原工作区的文件与pull 下来的文件有冲突,要手动修改冲突

当然,我们可以删除git stash的内容:

#注意这是清空你所有的内容
git stash clear

#这是删除第一个队列
git stash drop stash@{0}  

 

以上是关于如何干净地切换到一个分支的主要内容,如果未能解决你的问题,请参考以下文章

如何干净地合并包含 revert 的分支(包含 revert 的分支将 revert 视为新更改)

当 Jupyter 笔记本在一个分支上运行时,如何安全地切换 Git 分支?

Discord.py 如何制作干净的对话树?

【学了就忘】Git分支 — 44.分支切换的几种情况

git如何将上游(upstream)新建分支(origin没有)导入到origin中?

Word 文档的优秀代码片段工具或插件?