2013-12-12 63 views
23

如果我在分支A上工作並且突然需要在分支B上進行提交之前需要在分支B上工作,則我在A上存儲我的更改,結帳B,在那裏完成我的工作,然後結帳A並應用存儲。什麼時候應該使用git存儲?

如果我在A上工作並且我想停止工作一天,我是否應該保留自己的工作,然後在第二天應用它,當我恢復工作時,還是應該保留原樣 - 未提交修改文件在工作目錄中。我不明白爲什麼在這種情況下我需要使用存儲,除非有一些安全性好處。

此外,另一種情況 - 我在工作和家庭都工作。如果當我想回家時我還沒有準備好提交,我可以隱藏我的工作,把它推到GitHub上,然後把它藏在家裏?

回答

31

隱藏只是一種方便的方法。由於分支機構非常便宜且易於在Git中管理,因此我個人幾乎總是傾向於創建一個新的臨時分支而不是存儲,但這主要是一個品味問題。

的一個地方,我不喜歡積攢是,如果我發現我忘了的東西我最後一次提交,並已開始對下一個在同一分支工作:

# Assume the latest commit was already done 
# start working on the next patch, and discovered I was missing something 

# stash away the current mess I made 
git stash save 

# some changes in the working dir 

# and now add them to the last commit: 
git add -u 
git commit --ammend 

# back to work! 
git stash pop 
1

存儲命令將存儲自上次提交以來所做的任何更改。在你的情況下,如果你第二天要繼續工作,沒有理由隱藏。我只會使用存儲來取消您不想提交的更改。

+0

不,'git stash'不會改變你的分支。它尤其不會「恢復」任何承諾的更改。它只會(臨時)放棄對您的文件的任何未提交的更改。 - 它可能看起來很挑剔,但這些詞在git環境中有非常特殊的含義。你真的不應該混淆這些。 – michas

+0

謝謝你指出。我相應地改變了我的答案。 – Severin

+0

在git中,「分支」被定義爲一系列的提交。 'git stash'不會觸及任何提交,因此根本不會修改任何分支。它不會從分支中「移除」任何東西,也不會以任何方式「重置」它。分支保持不變,只有工作樹中的文件發生變化。 - 這是完全不同的兩件事。 – michas

0

如果碰到git stash當你有工作副本中的變化(不在暫存區),git將創建一個隱藏對象並將其推入堆棧(就像您做過的那樣,但您不會失去更改)。稍後,您可以從堆棧頂部彈出。

相關問題