[英]How to revert a file to a previous version without overwriting current changes?
[英]How to revert file to previous version
假設我在分支 A 上工作並且我從分支 B 合並了一些更改。分支 B 有一個名為 setup.sh 的文件,我在分支 A 上工作並修改 setup.sh 文件並提交它,然后執行讓我們說 3 個不同的提交分支 A 的其他文件。
現在我意識到我不應該在 setup.sh 文件中進行更改。 我想恢復到 setup.sh 的分支 B 版本。 明顯的解決方案是 git checkout 和 git commit,但它在 git blame 中顯示我修改過的文件。 我不要那個。 知道如何進行嗎?
要恢復到文件的特定版本,您必須進行包含該文件版本的新提交(以及其他每個文件的版本,就像任何其他提交一樣)。
明顯的解決方案是 git checkout 和 git commit,但它在 git blame 中顯示我修改過的文件。
情況總是如此,因為git blame
會根據每個快照之間的差異分配文件中每一行的所有權。 也就是說,我們得到了一系列提交的事實:
... <-F <-G <-H <--branch
其中分支名稱branch
告訴 Git最后一次提交是 commit H
, commit H
告訴 Git前一次提交是 commit G
, commit G
告訴 Git 前一次提交是 commit F
,依此類推。 git blame
所做的是從提交H
提取文件,然后從提交G
提取相同的文件。 在行匹配的地方,所有權從H
移動到G
,但我們還沒有完成。 如果行不匹配,則所有權位於H
。
現在,如果我們在G
, git blame
從提交G
和提交F
再次提取文件。 在線條匹配的地方,所有權移回F
,而在它們不匹配的地方,所有權保持在G
。
一旦我們到達F
,Git 從F
的父級中提取文件,並重復整個過程。
最終,每一行都有一個指定的提交,這就是您在該行左側看到的內容。
這意味着無論您如何將文件恢復到舊的 commit ,都是您恢復了文件,而git blame
將停在那里。 為了繼續下去,你必須運行第二個git blame
,它說從我提交之前開始,向后看你一直做的事情,現在git blame
將把這些行分配給更早的提交。 Git 從一個結尾開始向后工作,如果你希望它在你提交之前的一個結尾開始,你只需從那里開始,而不是在當前提交(或當前工作樹副本,這是我們真正擁有的地方)大多數情況下git blame
開始)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.