2016-10-25 5 views
7

Wie kann ich ein Commit, das ich unter erstellt habe, löschen? Dieses Commit, das ich gemacht habe, ist jetzt nicht der HEAD.Delete commit on gitlab

Wenn ich es nicht löschen kann, kann ich bearbeiten?

Wenn es der Kopf, war habe ich versucht:

git reset --soft HEAD 

git reset --soft HEAD^1 

git revert HEAD 

git rebase -i HEAD 

git rebase -i HEAD~1 

git reset --hard HEAD 

git reset --hard Id-Code 

ich es bereits re versucht, aber es bleibt noch auf dem Zweig. Jetzt habe ich es einfach aus dem HEAD entfernt, aber es ist immer noch da.

Es gibt einen anderen Befehl?

+0

Haben Sie das Commit auf Ihren Gitlab-Server geschoben? – marcusshep

+0

@marcusshep ja! – mhery

+0

Da @ Álvaro-p auf einen Kommentar nach seiner Antwort unten erwähnt, müssen Sie (-f) erzwingen, wenn Sie drücken und auch sicherstellen, dass der Zweig in GitLab nicht geschützt ist. – user12345

Antwort

12

nehme an Sie haben das folgende Szenario:

* 1bd2200 (HEAD, master) another commit 
* d258546 bad commit 
* 0f1efa9 3rd commit 
* bd8aa13 2nd commit 
* 34c4f95 1st commit 

Wo Sie d258546 heißt "bad commit" entfernen möchten.

Sie sollen einen interaktiven rebase versuchen, es zu entfernen: git rebase -i 34c4f95

dann Standard-Editor wird mit so etwas wie dieses Pop:

pick bd8aa13 2nd commit 
pick 0f1efa9 3rd commit 
pick d258546 bad commit 
pick 1bd2200 another commit 

# Rebase 34c4f95..1bd2200 onto 34c4f95 
# 
# Commands: 
# p, pick = use commit 
# r, reword = use commit, but edit the commit message 
# e, edit = use commit, but stop for amending 
# s, squash = use commit, but meld into previous commit 
# f, fixup = like "squash", but discard this commit's log message 
# x, exec = run command (the rest of the line) using shell 
# 
# These lines can be re-ordered; they are executed from top to bottom. 
# 
# If you remove a line here THAT COMMIT WILL BE LOST. 
# 
# However, if you remove everything, the rebase will be aborted. 
# 
# Note that empty commits are commented out 

entfernen Sie die Zeile mit dem Commit Sie entfernen lassen möchten, und speichern + beenden Sie den Editor:

pick bd8aa13 2nd commit 
pick 0f1efa9 3rd commit 
pick 1bd2200 another commit 
... 

git wird fortgesetzt, um diese aus dem Verlauf zu entfernen begehen so etwas wie dieses zu verlassen (die Hash-Änderung in der Zusammenarbeit ausmacht mmits Nachkomme von der Abnehm begehen):

* 34fa994 (HEAD, master) another commit 
* 0f1efa9 3rd commit 
* bd8aa13 2nd commit 
* 34c4f95 1st commit 

Jetzt, da nehme ich an, dass Sie bereits die schlechte begehen Gitlab gedrückt, müssen Sie Ihr Diagramm in das Repository (aber mit der -f Option repush es zu verhindern aufgrund einer nicht schnellforwardable Geschichte, dh git push -f <your remote> <your branch>)

Bitte seien Sie besonders vorsichtig und stellen Sie sicher, dass keine Mitarbeiter die Geschichte mit dem "schlechten Commit" in ihren Filialen bereits verwendet.

Alternative Option:

Anstatt die Geschichte neu zu schreiben, können Sie einfach erstellen Sie eine neue begehen, welche die Änderungen durch Ihre schlechte eingeführt negiert verpflichten, dies zu tun, nur git revert <your bad commit hash> eingeben. Diese Option ist vielleicht nicht so sauber, aber viel sicherer (falls Sie nicht genau wissen, was Sie mit einer interaktiven Rebase machen).

+0

Ich würde auf jeden Fall eine 'git revert' empfehlen.Viel weniger Arbeit und viel sicherer als das Überschreiben der Geschichte (was schwierig ist). Natürlich wird davon ausgegangen, dass keine sensiblen Informationen übertragen wurden. – tcooc

+0

@ tcooc gut, in meinem Fall, sensible Informationen wurde geschoben – mhery

+1

@mhery dann ist die erste Option, was Sie wollen. Stellen Sie sicher, dass Sie alle Ihre Commits überprüft haben, bevor Sie drücken, weil 'git push -f' permanent und nicht reversibel ist. – tcooc

3

1.git --hard CommitId

2.git Push -f origin master

ersten Befehl Kopf zurückgesetzt ruhen wird, und 2. Befehl commitid werden alle danach begehen löschen begehen ID auf Master-Zweig.

+0

Denken Sie daran, -f in Push hinzuzufügen, andernfalls wird es abgelehnt. –

Verwandte Themen