我想从未分阶段的更改中撤消一些更改。为此,我跑了:
$ git checkout -p
然后我选择 e 选项手动编辑我感兴趣的hunk并按下ENTER:
@@ -320,6 +326,7 @@ public class TtsPresenterImpl implements TtsPresenter {
public void onStopClicked() {
model.stopPlayList();
model.loadCurrentFile();
+
}
public static List<String> getFiles(File dir, String regex, boolean recursive) {
Discard this hunk from worktree [y,n,q,a,d,/,K,j,J,g,e,?]? e
底部的帮助告诉我:
# To remove '+' lines, make them ' ' lines (context).
# To remove '-' lines, delete them.
# Lines starting with # will be removed.
所以我用空格替换了+。我使用VIM,所以我将光标放在该位置,然后按下r后跟一个空格。对于那些不使用VIM的人来说 - 这是一个用空格替换光标下的字符的命令。不多也不少。
但是在我保存更改并使用:x
命令离开编辑器之后
Git通知我:
fatal: corrupt patch at line 26
Your edited hunk does not apply. Edit again (saying "no" discards!) [y/n]?
有什么问题?我预计这一变化将被取消。我也按照帮助中的建议尝试了#,但结果相同。
请不要建议丢弃大块头。是的,它有效,但我认为手动编辑存在一般问题。已经发生在我身上的事情,我'删除'只是一个方法中的一行,但整个方法后消失了。这很奇怪。
$ git --version
git version 2.7.4
另一次尝试(2次更改)。目标是保持更改y
,但撤消x
更改:
@@ -50,8 +50,9 @@ public class TtsModelImpl implements TtsModel, Serializable {
listeners = new ArrayList<>();
state = State.PLAYLIST_STOPPED;
sentenceIterator = new TextSplitterForTts();
-
+ x
load();
+ y
}
@Override
Discard this hunk from worktree [y,n,q,a,d,/,s,e,?]? e
在我用x行中的空格替换后,我得到了以下内容
...
x
load();
}
y
在哪里?
答案 0 :(得分:1)
你不能制造一个不改变任何东西的大块头;你必须在这种情况下使用y / n。同样的问题一般不会扩展到手动编辑。
但是,请按照说明中的一些短语进行操作:
我预计这项改变将被取消。
请不要建议丢弃大块头。是的,它有效
您试图从工作树中删除该行。当Git解释如何“移除'+'行”时,在git checkout -p
的上下文中,将从要删除的补丁中移除 。这可能是你消失方法的原因。
为了以更直观和可逆的方式处理这个问题,一个选项是要保留git add -p
个更改,进行临时提交,丢弃未提交的更改,以及重置临时提交。