公司的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