如何干净地切换到一个分支
一、如何保持一个干净的分支
当执行命令 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
注意:有时新建的一个项目因一些开发工具自带的配置文件等导致切换分支失败,报:Untracked Files Prevent Checkout
这时如果修改都不需要的话,可以使用git命令强制切换分支:
- 进入工程所在目录
- 右键打开Git Bash Here
- 执行git checkout -f develop-branch (develop-branch是我想切换的分支)
二、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}