2014-09-21 115 views
1

假設我有五個修改過的文件,並且我將它們中的兩個放在了commit處(我們稱之爲commit A)。然後,我仍然有三個未提交的更改留給未來的提交。現在假設在將來某個時候我決定將我的工作目錄恢復爲提交A,那麼這些文件的狀態將不會提交給A,而是會被修改。這些變化會丟失嗎?Git階段和提交 - 恢復時未提交的文件會發生什麼?

+1

如果您在問題中使用特定命令而不是使用其他版本控制系統的隨機術語,會更好。我只能猜測你在說'git reset',你可以通過指定'--soft',' - mix'或'--hard'來明確地選擇索引和工作樹會發生什麼。 – 2014-09-21 15:08:44

+2

同意; 「恢復」在Git中是一個精確的術語,但通常用於表示更多類似於該工具的新用戶的「重置」。你能描述一下你想要做的更詳細的事情嗎? – 2014-09-21 16:03:47

+0

@EdwardThomson在這裏發表評論以及那些由FractalSpace提供的答案,我認爲我已經開始融合到這樣的理解:我一直在想的是git reset,而不是回覆。 – deepak 2014-09-23 13:26:45

回答

2

A git revert只會修改正在恢復的commitA的文件。
它不會觸及任何其他文件。

這就是說,這可能是一個好主意,以保存這些文件,只是爲了確保(git stash)沒有發生任何事情「出錯」。

1

無論您當前的分段情況如何,提交'A'的'還原'僅會在頂部創建一個新的提交(例如A *),這會反轉提交A的影響。您需要啓動使用乾淨的工作目錄恢復進程(即隱藏或提交修改/暫存的文件)。

+1

好吧,通過將更改恢復到索引來恢復工作。因此,如果沒有進一步確定實際發生的上演和未上演的變化,他們就不會「參與」,這似乎是過分簡單的。 – 2014-09-21 13:10:27

+1

正確。實際上,如果存在任何分步或修改的文件(編輯我的答案),'git revert'將會被阻止。 – FractalSpace 2014-09-21 15:01:58

+0

所以如果我理解正確,我的工作副本將被更改以反映提交A中的更改,但其他文件中的部分工作不會顯示出來?即無法恢復其他文件中的部分工作。這意味着在恢復之後,我的非工作副本並不是早期工作副本的確切複製。 (我明白我的期望可能並不完全可行......) – deepak 2014-09-21 15:38:50