假設這一直是你的工作流程:
- 你犯了一個文件
- 你做了一些改變,並上演它
- 你做一些改變,但要恢復到版本步驟分階段變化2.
你只需要運行git checkout -- A
。這將消除任何未分離的更改,但會在第2步結束時保留更改。
看看下面這個例子的工作流程,這將澄清一些事情:A的
內容只是version1
$ echo "version1" > A
提交更改 $ git的A加& & git的承諾-q -m「初始承諾'
$ git log
commit 4fd90642df048ca4beeb29c65c5f7a436e83055a
Author: Tuxdude <[email protected]>
Date: Fri Mar 8 16:28:36 2013 -0800
initial commit
A的內容現在是version2
$ echo "version2" > A
$ cat A
version2
舞臺文件更改
$ git add A
檢查當前的git狀態
$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: A
#
做一些更多的變化A
$ echo "version3" > A
$ cat A
version3
現在你決定,你想擺脫祿在A中未分類的變化。你只需要從git的緩存中檢出文件,也就是臨時區域。
$ git checkout -- A
$ cat A
version2
您可以再次運行git status
,它會讓你知道階段性變化。
$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: A
#
對不起,但你發佈的工作流程並不反映我問到的那個。在我的問題中,「A」經歷了三種不同的狀態:第一種承諾;第二個已經上演;第三個是當前目錄中的一個。我想恢復第二個(不僅在索引中,而且在工作目錄中)。在我發佈這個問題後,我想到了一個我發佈的解決方案。解決方案很難看,但至少它清楚地表明瞭我想要弄清楚該怎麼做。 – kjo 2013-03-09 00:42:22
@kjo - 您的問題對我來說還不清楚 - 至少從您發佈的最初問題來看。你有一個文件'A',它已經被首先提交,然後你有它上演,你有一些沒有被提交的未分階段的變化是嗎?你想在步驟2恢復到文件的版本 - 你只是在那裏上演但沒有提交?你能證實這一點嗎?我可以更新這個例子。 – Tuxdude 2013-03-09 00:45:24
對此感到抱歉;我希望,我編輯了原文,使其更清晰。 – kjo 2013-03-09 00:54:00