2013-02-22 37 views
10

問題:
我添加了一些文件到我的臨時區域。我想暫時保存這些信息。如何?如何保存我的臨時區域的當前狀態?

背景:
有時候我進行一些較大的重構。提交完整的結果纔有意義。
在這個重構過程中,我也做了一些我想獨立提交的無關變更。
例如,重構重命名了一個方法。無關的更改在同一個類中的另一個方法的一個參數上修正了拼寫錯誤。
現在,假設我已經將大部分文件添加到暫存區域,但是我發現我忘記了事先未提交任何無關的更改。
將文件添加到臨時區域需要一定的時間,因爲我檢查每一個文件以確保我確實只實現了我想要的。所以,簡單地將它們全部從暫存區域移除並不是解決方案。
我想這樣做,而不是:

  1. 保存暫存區
  2. 的當前狀態,刪除所有暫存文件
  3. 階段無關變化
  4. 提交無關的變化
  5. 重將保存的狀態應用於臨時區域。

這是不是有可能?

另一種解決方案是多個臨時區域的可能性,但我不認爲這是可能的。

+0

只有一個暫存區域。而git並沒有真正存儲它 - 你可以自己做。 – Reactormonk 2013-02-22 08:59:44

+0

你可能想[git stash]](http://git-scm.com/docs/git-stash)並做一些交互式結賬/添加,然後 – 2013-02-22 09:01:26

+0

@NevikRehnel:git將如何保存我放入的工作暫存區的現有狀態? – 2013-02-22 09:05:23

回答

12

下面的命令鏈應該做的伎倆

git commit -m "temporary" # save current stage are as an actual commit 
git commit unrelated_files -m "The other feature" 
git stash # hide the rest 
git rebase -i HEAD~2 # change the order of two last commits 
git reset HEAD^ # rollback the "temporary" commit 
git add . # add everything from that commit back to staging 
git stash pop # and return back all initially unstaged stuff 
+0

是的,那很完美。非常感謝! :)它完全符合我對git的使用。無論如何,我還是做了很多重組。 – 2013-02-23 12:36:02

2

你一定要git stash

這將節省你目前的工作,並留下您的目錄,如果你做了復位到HEAD。 您現在可以切換分支,對另一個主題做一些工作。

當你準備好你的功能再次合作,與git stash apply

重新申請你的藏匿更改,可以將多個儲物箱,git stash list將列出它們,那麼你可以選擇一個至極適用,如git stash apply @{1}

編輯:

正如@ n​​evik-rehnel在評論中說,你也可以使用交互式增加。

卸下所有內容,使用git add -p來分階段執行不相關的更改,提交併重新設置所有內容。

+1

不,這是明確*不*我需要的。我正在談論*暫存區*,而不是我的工作目錄。我也不想改變我的分支。 – 2013-02-22 09:11:45

+0

Git存儲將保存您的暫存區域並保留一個乾淨的目錄,然後您可以更改文件,執行不相關的提交,隱藏應用,完成工作並提交。 – Intrepidd 2013-02-22 09:12:39

+0

更詳細的示例請參見此要點:https://gist.github.com/Intrepidd/d52b7e190aec8cd29854 – Intrepidd 2013-02-22 09:15:52

0

你爲什麼不能將其保存爲一個分支,開始一個新的分支

0

這似乎工作:

  • git commit -m「temp」
  • git stash -u
  • git reset HEAD^
  • git stash保存「MeepMeep!」
  • git stash pop stash @ {1}
相關問題