2014-03-25 96 views
0

我需要存儲git回購的當前狀態。後來我需要回到國家。保存當前git狀態的回購

保存的狀態應包含當前分支並對其進行更改。

例子:

  1. 我分支master和已經修改foo.py.
  2. 保存狀態
  3. 修改回購:例如:結賬其他分支。
  4. 返回狀態:切換到掌握和還原修改foo.py

AFAIK stash或臨時黨支部不會幫助這裏,因爲分支名被不保存。

我可以接受管道命令,因爲保存和恢復將在腳本中完成。

+1

爲什麼不這樣做呢? – Holloway

+1

這正是隱藏的東西 –

+0

做另一個克隆?然後,你可以做任何你喜歡的事情,並保證原始克隆就像你離開它一樣。另一方面,我只是在工作分支上做一個臨時提交foo,切換到其他東西,然後切換回我的工作分支,當我完成其他的東西。當您恢復工作以完全恢復狀態時,您總是可以重置分支git reset HEAD〜1。 – slobobaby

回答

3

使用git stash保存狀態:它提出了兩個提交不屬於「關於」任何分支(他們通過特殊refs/stash名稱,而不是發現的),包含索引的狀態,並且狀態你的工作樹。然後它使用git reset --hard來擺脫任何工作樹和索引更改,使安全更改分支。

stash不保存的狀態的一個狀態是分支的名稱,如果有的話,您在儲藏時保存的分支的名稱。

要保存,你需要運行git symbolic-ref HEAD(使用--short得到一個分支名,並注意它退出非零如果HEAD不是象徵性的參考,即是目前「分離」;在這種情況下,你可能需要將當前提交ID保存在某個地方,可能在參考中以保護它)。

注意git stash save會做什麼,如果沒有狀態保存,所以明智的做法是驗證refs/stash存在和git stash save步驟之後,點到一個新的和不同的提交-ID。 (在腳本中這樣做並不太困難:使用git rev-parse -q --verify refs/stash來獲取新的提交ID,並在save之前使用它以獲取舊的提交ID。與git symbolic-ref一樣,如果參考不存在,它將退出非零。)


或者,三個提交如果使用git stash save -ugit stash save -a。第三次提交包含的文件git通常只剩下:未跟蹤和忽略的文件。詳情請參閱git stash documentation

+0

謝謝,你理解我的問題,解決方案看起來不錯。 – guettli

相關問題