[Git]活用Git棧暫存你的代碼

如果你的代碼沒有提交,去遠端拉取代碼時,經常會碰到"Your local changes would be overwritten by merge"這個提示。但是問題在於,這時候你的代碼並沒有開發完,不太想去去提交代碼。這些事情在git裏面都想到了,這篇文章就來介紹一下git stash的用法。

概述

我們開了一個分支,在這個分支上面寫自己代碼,這時候發現別的分支有一個bug,於是先commit自己未完成的代碼,切到別的分支,把那個分支的代碼修復完成後,再切換回自己的分支繼續開發。這很明顯導致了一個問題:在我的功能點開發完成後,我的git上多了很多沒必要的提交記錄

其實如果我們不想提交完成一半或者不完善的代碼,但是卻不得不去修改一個緊急bug,那麼使用git stash就可以將你當前未提交到本地(和服務器)的代碼推入到Git的棧中。前提是我們的代碼沒有進行commit,哪怕執行了add也沒關係。

意思就是把當前分支所有沒有commit 的代碼先暫存起來,這個時候你再執行git status你會發現當前分支很乾淨,幾乎看不到任何改動,你的代碼改動也看不見了,但其實是暫存起來了。執行git stash list你會發現此時暫存區已經有了一條記錄。這個時候你可以切換會其他分支,趕緊把bug修復好,然後發佈。之後一切都解決了,你再切換回來繼續做你之前沒做完的功能。

git stash相關命令

git stash list [<options>]
git stash show [<options>] [<stash>]
git stash drop [-q|--quiet] [<stash>]
git stash ( pop | apply ) [--index] [-q|--quiet] [<stash>]
git stash branch <branchname> [<stash>]
git stash [push [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet]
	     [-u|--include-untracked] [-a|--all] [-m|--message <message>]
	     [--] [<pathspec>…​]]
git stash clear
git stash create [<message>]
git stash store [-m|--message <message>] [-q|--quiet] <commit>

常用git stash命令:
git stash: 備份當前的工作區的內容,從最近的一次提交中讀取相關內容,讓工作區保證和上次提交的內容一致。同時,將當前的工作區內容保存到Git棧中。
git stash save ‘message’:備份工作區內容,同時添加備註信息。
git stash save -a “messeag” :沒有加 -a 這個option選項,代碼開發可能是在原代碼上進行修改的。而對於在項目里加入了代碼新文件的開發來說,-a選項纔會將新加入的代碼文件同時放入暫存區。
git stash apply: 從Git棧中讀取最近一次保存的內容,恢復工作區的相關內容。但是不會將該stash記錄刪除
git stash drop: 把最近的一條stash記錄刪除。
git stash pop: 從Git棧中讀取最近一次保存的內容,恢復工作區的相關內容。由於可能存在多個Stash的內容,所以用棧來管理,pop會從最近的一個stash中讀取內容並恢復,同時會刪除這條stash記錄,相當於git stash apply和git stash drop一起執行了。
git stash list: 顯示Git棧內的所有備份,可以利用這個列表來決定從那個地方恢復。
git stash clear: 清空Git棧,原來存儲的所以stash的節點都消失了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章