2017-09-14 72 views
0

enter image description hereGit的恢復相匹配的模式

我錯誤地更換所有,並保存在我的文檔線,均有Git的跟蹤行。我之前做過一些工作,並且在做之前忘了作爲檢查點提交,因此恢復是不可取的,因爲它會恢復我的所有工作。我想只使用Git的幫助來恢復所有的操作。

我知道所有需要恢復的行,因爲它們全都具有相同的新行。從像SourceTree這樣的GUI工具中,我可以逐個點擊Discard Hunk,但有很多這樣的位置,我想放棄。所有我想回復的地方有新的生產線,說

m_Sprite: {fileID: 21300164, guid: 791de2a5646d94a15a09bb1d7e79a0e6, type: 3}

但舊線是沒有必要相同。 (實際上有兩種舊的線條我改成這個新的線條)是否有任何腳本方式來匹配改變線條的模式,以便我可以有選擇地將它們全部還原?謝謝。

以交互方式使用git add -p添加除了大塊外的所有東西,我不想前進是非常乏味的,因爲它會逐個問你,但是有太多的作品需要添加,並且同時我沒有幾乎每個文件都要混合使用。 (所以我必須非常小心git問的每一個問題)git checkout -p同樣適用於刪除我不想倒退的胖子。

+2

'並忘記作爲一個檢查點之前這樣做'...我認爲Git不會幫助你在這裏。 Git的通用語言是提交文件,代表文件的版本。 Git從來沒有看到你所做的早期工作被替換掉了。你最好的選擇可能是從你的IDE中使用undo。 –

+0

您是如何在項目中「全部替換」的?無論您曾經做過哪些工具,都應該進行撤銷操作或至少採用某種方式進行反向轉換。 –

+0

@NoufalIbrahim操作是查找並替換所有Visual Studio代碼。之後,我保存了所有的文件,並且已經關閉了編輯器,所以我無法撤消它們。 (我試圖關閉程序保存所有文件,當出現警告對話框時,我點擊Save All) – 5argon

回答

1

好吧,我設法修復使用補丁的問題。

首先,我將這種混亂的狀態作爲檢查點提交。然後,我可以生成一個這種狀態的補丁(用我想恢復的行代替我加入的所有工作)和之前提交的記錄(使用正確行記錄的那個)

git diff --binary HEAD^ HEAD > ~/Desktop/patch.diff

請注意,先前的提交首先出現在命令中。

隨着修補程序保存在某處,我重置爲以前的提交和git clean -f。現在,如果我我會達到相同的點(但仍然保持以前的承諾)這個想法是直接編輯補丁手術前申請。

這個補丁是由hunk組成的,所以爲了禁用某個特定的hunk我不希望這個方法是用-之前的那個替換+行。我可以在VSCode中使用正則表達式搜索\n(不要忘記將+字符作爲\+以避免算作正則表達式)並將其全部替換。

這種方式比刪除hunk更好,因爲沒有機會破壞補丁的格式。補丁不知道它是否正在變成同一條線,什麼都不做。

enter image description here

編輯補丁和應用後,我得到了所有的變化減去我們前面編輯的帥哥。所以它等於「恢復所有我不想要的人」的行爲。