簡體   English   中英

如何選擇性地將單個提交中的某些更改還原到單個文件?

[英]How do I selectively revert some changes in a single commit to a single file?

我的問題:我愚蠢地對文件進行了許多更改,然后一次提交了所有更改。

從那以后,我意識到很多變化都是廢話……但是很多變化也是不錯的。

如何有選擇地還原部分更改?

假設此后您還沒有提交其他任何內容,我將撤消您的提交使用git add -p您想要的文件的任何部分 ,然后重新提交

我很確定這應該可行

使用git rebase -i可以將較早的提交分成幾部分,但是只能在可以重寫其歷史的分支上使用。 操作順序如下:

git rebase -i <commit>~1

其中<commit>是要分解的提交。 在交互模式下,將pick更改為edite更改為您想要破壞的提交。 然后關閉編輯器,讓重新設置繼續。 rebase到受影響的提交時,它將暫停,使您可以在那時進行所需的任何編輯。 這包括諸如git reset HEAD <file>到取消git reset HEAD <file>git reset HEAD到全部git checkout -- <file>所有內容,以及git checkout -- <file>放棄工作目錄中的更改。

在這里,您可以按任意順序提交更改。 我建議git add -p以交互方式添加補丁集,如果對同一文件的多次更改最好是多次提交的話。

最后,當您提交了所有您希望在不連續的提交中執行的所有操作,並准備好繼續進行rebase時,只需發出git rebase --continue

如果要避免重寫歷史記錄, 此答案將向您展示如何使用git revert --no-commit僅還原部分提交。

在此處輸入圖片說明 在諸如netbeans之類的IDE中打開文件時,您可以實時看到所有更改,就像每行開頭的顏色代碼一樣。 右鍵單擊這些顏色標記之一,可以顯示以前的內容。 右鍵單擊上下文菜單還可以使您僅撤消對文件所做更改的那部分。 因為您已經提交了更改,所以可以執行git reset soft HEAD^ ,然后在netbeans中打開文件,有選擇地撤消更改,然后執行git commit

有人知道如何在emacs中執行此操作嗎? (這是我遇到這篇文章時所要尋找的。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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