Ich habe mit einem Freund an einem Projekt gearbeitet, und er hat eine Reihe von Dateien bearbeitet, die nicht hätten bearbeitet werden dürfen. Irgendwie habe ich seine Arbeit mit meiner verschmolzen, entweder, als ich sie abgerufen habe, oder als ich versucht habe, nur die Dateien herauszusuchen, die ich wollte. Ich habe lange gesucht und herumgespielt, um herauszufinden, wie man die Commits entfernt, die die Änderungen an diesen Dateien enthalten, es scheint eine Entscheidung zwischen revert und rebase zu sein, und es gibt keine eindeutigen Beispiele, und die Dokumentation geht davon aus, dass ich mehr weiß als ich tue.
Hier ist also eine vereinfachte Version der Frage:
Wie entferne ich in dem folgenden Szenario die Übergabe 2?
$ mkdir git_revert_test && cd git_revert_test
$ git init
Initialized empty Git repository in /Users/josh/deleteme/git_revert_test/.git/
$ echo "line 1" > myfile
$ git add -A
$ git commit -m "commit 1"
[master (root-commit) 8230fa3] commit 1
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 myfile
$ echo "line 2" >> myfile
$ git commit -am "commit 2"
[master 342f9bb] commit 2
1 files changed, 1 insertions(+), 0 deletions(-)
$ echo "line 3" >> myfile
$ git commit -am "commit 3"
[master 1bcb872] commit 3
1 files changed, 1 insertions(+), 0 deletions(-)
Das erwartete Ergebnis ist
$ cat myfile
line 1
line 3
Hier ist ein Beispiel dafür, wie ich versucht habe, umzukehren
$ git revert 342f9bb
Automatic revert failed. After resolving the conflicts,
mark the corrected paths with 'git add <paths>' or 'git rm <paths>'
and commit the result.