2017-09-20 2 views
2

Ich und mein Kollege arbeiten an demselben Repository, und mein Kollege hat Fehler gemacht, er hat meine Dateien bearbeitet und einfach gedrängt.Push-Commits und Rollback auf spezifisches Commit entfernen

Das Problem ist, dass ich auch gerade an der gleichen Datei arbeite, also wenn ich das Festschreiben ziehe, wird es jedes meiner Arbeiten entfernen.

Dateien sind binär, daher kann ich nicht vom Texteditor aus bearbeiten. Dies ist, was genau die aktuellen Situationen erklären:

1. Commit ich einige Binär-Dateien gemacht, zum Beispiel: a.bin, b.bin, c.bin und schob zum Master-Zweig als commit [1]

Commit 2. Mein Mitarbeiter Pull commit [1] und schob, was er arbeitete als [2]

Commit 3. Mein Mitarbeiter versehentlich meine Binärdateien bearbeitet: a.bin, b.bin, c.bin aber er schob nur als commit [3]

Commit 4+: Mein Mitarbeiter nur gedrückt halten ..

Also, was ich will, ist nur Rollback die Commits, zurück zu den alten spezifischen Commit. Ich habe nach Git-Rebase und Git-Revert gesucht, aber es scheint mir ganz und gar nicht zu funktionieren.

Ich habe gehört, dass mit Merge auch funktionieren, aber ich möchte meine Geschichte sauber zu halten!

Alles, was ich will, ist alles zurück zu den alten Commit zu bekommen, aber es sagt immer wieder, dass Sie einige ungeordnete oder nicht gespeicherte Dateien drüben haben und halten Sie damit versagt. Ich möchte nur alte Dateien außer Kraft setzen.

Wie löse ich das?

+0

Was ist der genaue Git-Commit-Baum, innerhalb Git mit dem Standard-Workflow, Git-Commits haben mehrere Eltern – Ferrybig

+0

Extrahiert die Binaries von Commit [1] und commit sie über die neueste Commit eine Option? –

+0

Versuchen Sie, die Binärdateien auf das alte Commit oder das gesamte Projekt zurückzusetzen (die Commits des Mitarbeiters zu verlieren)? –

Antwort

3

Versuchen Sie eine git reset zu dem alten Festschreiben. Dann können Sie eine git push --force tun, um die Fernbedienung zu aktualisieren. Dies würde jedoch zu einigen Änderungen am Projektverlauf führen, und Ihr Mitarbeiter muss den Repo möglicherweise erneut klonen, anstatt ihn zu ziehen. Wenn nicht verbundene/nicht verbundene Pfade angezeigt werden, versuchen Sie es vorher mit git stash.

+1

Das funktioniert. Vielen Dank! – modernator

0

Sie können die binären Dateien wiederherstellen von commit [1] mit:

$ git show SHA1:path/to/file >path/to/file 

Beispiel wird die "gute" Version der binären Dateien zur Verfügung gestellt in 7bb43ac begehen:

$ git show 7bb43ac:bin/a.bin >bin/a.bin 

die Sie Gleich für alle drei 3 von ihnen, dann begehen und drücken.

1

Bevor Sie zum alten Commit zurückkehren, vergewissern Sie sich bitte, dass Ihr Arbeitsbaum jetzt sauber ist, indem Sie git status.

Dann können Sie das Festschreiben angegebenes Rollback (wie Commit 2) durch den Befehl:

git reset --hard HEAD~2 

Hinweis:git reset --hard HEAD~n den aktuellen Zweig zum n ten vorherigen begehen als HEAD zurückgesetzt. Wenn Sie auf Commit 3 zurücksetzen möchten, können Sie git reset --hard HEAD~1 verwenden.

die Geschichte begeht So wird wie folgt aussehen:

Commit 2. My co-worker pull commit [1] and pushed what he worked as [2] 
Commit 1. I made some binary files, for example: a.bin, b.bin, c.bin and pushed to master branch as commit [1] 

Um die Änderungen an Remote-Repo zu aktualisieren, können Sie die Remote-Repo des Fest spezifizierte Änderung verwenden git push -f zu erzwingen.

Verwandte Themen