如果有未提交的更改,是不能
git pull
的,下面演示一下如何不提交更改,拉取代碼,實現(xiàn)Android Studio的Update project
修改一個文件
D:\client>git status
On branch lichen_test
Your branch is up-to-date with 'origin/lichen_test'.
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: xxx.java
no changes added to commit (use "git add" and/or "git commit -a")
說明有一個文件被修改了,還沒有add,相當(dāng)于本地修改。這時,我想拉取服務(wù)端最新代碼,發(fā)現(xiàn)是error的:
D:\client>git pull --rebase
error: Cannot pull with rebase: You have unstaged changes.
因為git pull
只是在本地更改commit之后,才是被允許的。
先看一下之前已經(jīng)stash過的記錄:
D:\client>git stash list
stash@{0}: On lichen_test: Uncommitted changes before Update at 2016/5/17 11:22
然后把剛才的本地修改藏起來stash
:
D:\client>git stash
Saved working directory and index state WIP on lichen_test: 6acf645 something
HEAD is now at 6acf645 something
之后,看一下狀態(tài):
D:\client>git status
On branch lichen_test
Your branch is up-to-date with 'origin/lichen_test'.
nothing to commit, working directory clean
D:\client>git stash list
stash@{0}: WIP on lichen_test: 6acf645 something
看到的狀態(tài)是沒有需要commit的,工作空間是干凈的;stash的歷史記錄里又多了一條。
然后執(zhí)行git pull
就可以了:
D:\client>git pull --rebase
Current branch lichen_test is up to date.
剛才藏起來的更改恢復(fù)回來:
D:\client>git stash pop
On branch lichen_test
Your branch is up-to-date with 'origin/lichen_test'.
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: xxx.java
no changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/stash@{0} (c09db35f5eb59ada6770fe6ab6073b4f00bc912a)
看一下歷史記錄
D:\client>git stash list
stash@{0}: On lichen_test: Uncommitted changes before Update at 2016/5/17 11:22
這樣就完成了一次Android Studio的Update工程
總結(jié)一下stash命令:
git stash #可用來暫存當(dāng)前正在進(jìn)行的工作
git stash pop #從Git棧中讀取最近一次保存的內(nèi)容
git stash list #顯示Git棧內(nèi)的所有備份
git stash clear #清空Git棧
git stash apply stash@{1} #可以將你指定版本號為stash@{1}的工作取出來