### 1. stash 保存现场
> 在某个分支上修改后,add之后,暂时不想提交。但是此时要切换分支是系统不允许的。
```
wangyijiadeMacBook-Air:August Notes bizzbee$ git checkout master
error: Your local changes to the following files would be overwritten by checkout:
Code.html
Please commit your changes or stash them before you switch branches.
Aborting
```
> 系统提示你只能提交或者stash保存现场之后才能进行切换分支。
```
wangyijiadeMacBook-Air:August Notes bizzbee$ git status
On branch feature1
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: Code.html
wangyijiadeMacBook-Air:August Notes bizzbee$ git stash
Saved working directory and index state WIP on feature1: 4cf57c2 mod code
wangyijiadeMacBook-Air:August Notes bizzbee$ git status
On branch feature1
nothing to commit, working tree clean
wangyijiadeMacBook-Air:August Notes bizzbee$
```
>执行git stash后整个工作区的修改被隐藏,git status 提示是干净的。
>这时候也可以切换分支去干其他工作了。
>干完回来。工作区是干净的,刚才的工作现场存到哪去了?用`git stash list`命令看看:
~~~
$ git stash list
stash@{0}: WIP on dev: f52c633 add merge
~~~
> 工作现场还在,Git把stash内容存在某个地方了,但是需要恢复一下,有两个办法:
1. 一是用`git stash apply`恢复,但是恢复后,stash内容并不删除,你需要用`git stash drop`来删除;
2. 另一种方式是用`git stash pop`,恢复的同时把stash内容也删了:
```
wangyijiadeMacBook-Air:August Notes bizzbee$ git stash apply
On branch feature1
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: Code.html
no changes added to commit (use "git add" and/or "git commit -a")
wangyijiadeMacBook-Air:August Notes bizzbee$ git add .
wangyijiadeMacBook-Air:August Notes bizzbee$ git commit -m 'stash back'
[feature1 760d527] stash back
1 file changed, 1 insertion(+), 1 deletion(-)
wangyijiadeMacBook-Air:August Notes bizzbee$ git status
On branch feature1
nothing to commit, working tree clean
wangyijiadeMacBook-Air:August Notes bizzbee$
```
### 2. 丢去没有被合并过的分支
如果要丢弃一个没有被合并过的分支,可以通过`git branch -D <name>`强行删除。
### 3.推送到远程仓库指定某个分支。
推送分支,就是把该分支上的所有本地提交推送到远程库。推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上:
~~~
$ git push origin master
~~~
如果要推送其他分支,比如`dev`,就改成:
~~~
$ git push origin dev
~~~
> 本地有的分支才能推送到远程,而且是对应的分支。
查看当前对应的远程库
当你从远程仓库克隆时,实际上Git自动把本地的`master`分支和远程的`master`分支对应起来了,并且,远程仓库的默认名称是`origin`。
要查看远程库的信息,用`git remote`:
~~~
$ git remote
origin
~~~
或者,用`git remote -v`显示更详细的信息:
~~~
$ git remote -v
origin git@github.com:michaelliao/learngit.git (fetch)
origin git@github.com:michaelliao/learngit.git (push)
~~~
上面显示了可以抓取和推送的`origin`的地址。如果没有推送权限,就看不到push的地址。