簡體   English   中英

如何將文件恢復到以前的版本

[英]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

現在,如果我們在Ggit 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM