2016-08-08 44 views
1

Ich bin ziemlich neu zu Git und kam von mercurial. Ich habe etwas falsch gemacht und es geschoben, aber einige Teamkollegen konnten diese falschen Änderungen bereits vornehmen. Also reset --hard; push -f ist keine Option. Ist es möglich, git zu sagen, dass ich Änderungen vornehmen will, so dass es vor 2 commits war? Ich meine, so etwas wie diese:Ist es möglich, zu einem Commit ohne Reset zurückzukehren - hart?

master:

commit 4 <<--- Remote/local master's head 
^
    | 
    | 
commit 3 
^
    | 
    | 
commit 2 <<-- I want git to craft changes so that commit 5 
^   is the same as commit 2 
    | 
    | 
    | 
commit 1 

ich git will Änderungen zu erzeugen, so dass commit 5 Dateien verändert, so dass sie gleich werden, wie sie bei commit 2 waren.

Ist es möglich zu tun?

Antwort

3

können Sie revert die revert mit git commit:

git revert commit3 commit4 

Das erzeugt "reverse" verpflichten, dass die Änderung unmake finden Sie in den anderen Commits machen habe.

Die Geschichte wird immer noch schnell vorwärts sein, auf Ihrem Weg, es ohne -f zu schieben.

+0

Aber ist es möglich zu vermeiden, alle commits zu spezifizieren? Ich meine, vielleicht gibt es eine Möglichkeit, git zu sagen, dass ich alle Commits von 'commit x' auf' commit y' zurückführen möchte. – user3663882

+0

Nein, es gibt keinen Weg soweit ich weiß. Die Verwendung von 'commit3 ... commit4' ist zu gefährlich, und git verhindert dies standardmäßig. – blue112

+0

Bekam es. Also, wenn wir etwas falsch gemacht haben, müssten wir Commit per Commit manuell zurücksetzen. Vielen Dank. – user3663882

1

Es gibt kein Problem mit erzwungenem Push für Ihre Teamkollegen, sie müssen das Repository nur auf den letzten bekannten guten Commit zurücksetzen, bevor Sie ziehen (git reset --hard sha1-of-old-good-commit) und dann die Änderungen erneut ausführen. Außerdem, wenn Sie zu Ihrem "privaten" Arbeitszweig geschoben werden, sollten sie sich überhaupt nicht für diesen Zweig interessieren, das Problem nur mit master oder einem anderen Zweig, den Sie alle Ihre Arbeit in zusammenführen.

So, um Probleme mit der Geschichte zu minimieren Umschreiben (es ist die nette Eigenschaft von git, und es ist gut, es zu benutzen und keine Notwendigkeit, das zu leugnen!) - Immer commit to private branch: Sie werden sicher sein, Commits in diesem Zweig zu repassieren/squash/editieren, bevor Sie mit " Meister "Zweig.