公司的git開發模式是“主幹釋出,分支開發”,大多數情況下是多個開發在同一dev分支上進行開發,是以需要經常pull代碼,如果本地工作區存在代碼修改,那麼pull肯定失敗,提示需要先commit已修改的部分,
如下
error: Your local changes to the following files would be overwritten by merge: xxx/xxx/xxx.php Please, commit your changes or stash them before you can merge. Aborting
如果這時候,你的修改并未完成,并不需要或不想commit未完成的代碼,這時候可以用git stash 和 git stash pop來完成在不commit代碼的情況下進行pull代碼;
基礎指令:
$git stash
$git pull
$git stash pop
通過git stash将工作區恢複到上次送出的内容,同時備份本地所做的修改,之後就可以正常git pull了,git pull完成後,執行git stash pop将之前本地做的修改應用到目前工作區。
git stash: 備份目前的工作區的内容,從最近的一次送出中讀取相關内容,讓工作區保證和上次送出的内容一緻。同時,将目前的工作區内容儲存到Git棧中。
git stash pop: 從Git棧中讀取最近一次儲存的内容,恢複工作區的相關内容。由于可能存在多個Stash的内容,是以用棧來管理,pop會從最近的一個stash中讀取内容并恢複。
git stash list: 顯示Git棧内的所有備份,可以利用這個清單來決定從那個地方恢複。
git stash clear: 清空Git棧。此時使用gitg等圖形化工具會發現,原來stash的哪些節點都消失了。
進階: git stash save "work in progress for foo feature" 當你多次使用’git stash’指令後,你的棧裡将充滿了未送出的代碼,這時候你會對将哪個版本應用回來有些困惑, ’git stash list’ 指令可以将目前的Git棧資訊列印出來,你隻需要将找到對應的版本号,例如使用’git stash apply stash@{1}’就可以将你指定版本号為stash@{1}的工作取出來,當你将所有的棧都應用回來的時候,可以使用’git stash clear’來将棧清空。 ps,放棄本地修改的方法 git reset --hard git pull 參考連結 http://blog.csdn.net/wh_19910525/article/details/7784901
參考
http://www.letuknowit.com/post/144.html