2017-06-07 61 views
0

我提交了添加了一些代碼並刪除了一些代碼的更改。現在,我想撤消這個。該文件還有其他更改(以及提交中更改的其他文件),我不想撤消該文件,因此標準的git恢復將不會執行。我想要的是創建一個提交,通過提供行號撤消這些選擇更改。最好是一種技術,允許我使用我的GUI客戶端(Github桌面)來選擇diff中的更改/行號。我會怎麼做呢?恢復Git中文件的選擇行

+0

通過撤消,你的意思是創建一個類似於一個復歸承諾,只有恢復這些行的東西,做你的意思是你想擺脫原來的提交,或者你的意思是你想改變原來的提交不改變這些行,但改變所有其他的行爲呢? –

+0

我的意思是恢復的方式。創建了一個新的提交來解除這些選定的更改。 –

+0

如果答案有助於您解決問題,請將其標記。它會幫助其他有類似問題的人。 –

回答

1

可能有多種方式來實現這一點,但我喜歡的東西去:

# stage a reversion of the given commit without making a commit of this reversion 
git revert -n <hash-of-commit-to-partially revert> 

# Unstage these changes so the reversion is only in the working tree 
git reset 

# Selectively stage only the parts which make the reversions which you want 
git add -p <path-of-interest> 

# Optional: discard other changes from the working tree for testing 
# (you might need to "git clean" if you are discarding the reversion 
# of a change that originally removed a file) 
git checkout -- . 

# Commit the selective reversion 
git commit 
+0

謝謝。這很可能適用於我。尤其是通過允許我有選擇地在GUI客戶端中重新添加對索引的更改。然而,我覺得有一個不同的情況,比如說,我有很多文件被更改,我想要做的就是更改一行。我必須添加除了那一行之外的所有內容。似乎效率低下。 –

+0

@AlexBollbach:即使對於這種情況,我也可能會按照相同的程序。如果你有很多變化,並且你仍然可以將它限制在你感興趣的一個文件中,並且快速跳過你不感興趣的塊,那只是'add -p'很昂貴(在人的時間) 。 –

+0

@AlexBollbach:這可能意味着你正在恢復的那個和當前提交之間的一些提交已經觸及相同的行你正在恢復的變化。您必須解決提交問題,但如果衝突僅影響您丟棄的回覆部分,則無需「正確」執行此操作。 –