如何在 Git 中取得 SVN 的恢復行為

如何在 Git 中取得 SVN 的恢復行為

我知道,我知道,但我剛剛了解到它的行為與至少在 Visual Studio 2015 中不git revert完全相同,或者在 TortoiseGit 中可能不完全相同。svn revert我會解釋一下:

我是 VS2015 的新手,也是 Git 的新手。當我發現 VS2015 已經整合了 Git,我就嘗試了一下。然而,我正在處理多個文件,並且我準備只提交其中一個。不幸的是,我在「團隊資源管理器」窗格中套用的篩選器不適用於已提交的文件(我猜這就是按鈕標題為「全部提交」的原因)。相反,它提交了所有“髒”文件——哎呀!

借助 TortoiseGit 查看我的存儲庫日誌,我選擇了最近的(本地)提交並通過“恢復此提交的更改”恢復了它。我原以為此操作會將我正在處理的文件恢復到我提交之前的“髒”狀態,就像 SVN 恢復所做的那樣,但令我驚訝的是,該操作將我的本地文件恢復到以前的回購協議版本,而不是我提交它們之前它們所處的狀態。

當然,我能夠檢索我的工作,因為它全部位於我最初提交的「所有文件」修訂版中。我只是開始將每個文件從它複製到其正確的目錄。但我在這裡缺少什麼?是否有我應該使用的 Git 功能而不是「恢復」?

答案1

在 Git 中,您可以刪除整個提交。最好只對未推送的提交執行此操作。 Git 的整個「分散式」部分使這成為可能。使用 SVN,您的變更可以立即供其他人使用。對於 Git,它們只有在推送後才可用(Visual Studio 中的「同步」)。

因此,不要恢復提交(這意味著錯誤的更改將保留在存儲庫中並可能產生意外的副作用),而是執行git reset --mixed HEAD~1.這意味著您的工作目錄將保持原樣,但最後一次提交將被刪除。這意味著 Git 將再次顯示所有已修改的檔案。

在 Git 中恢復會建立您恢復的提交的「反向」提交,從而撤銷所有變更。

然後,若要僅提交單一文件,請先檢查git statusGit 是否暫存不需要的變更。然後,用於git add path/to/file.txt(僅)暫存該文件。之後,只需執行git commit,使用適當的提交訊息即可完成。

當您執行git commit並彈出文字編輯器時,該檔案還包含將提交的變更清單。仔細檢查此清單以確保您只提交您想要的內容。

另外,不要使用 Visual Studio 來主動使用 Git。它嘗試將舊版 TFS 術語應用於 Git 操作,但它們並不相同。相反,嘗試在控制台上學習 Git。 Visual Studio 對於唯讀工作有一些不錯的好處,例如很棒的差異視圖。

相關內容