Domanda

Qual è il modo più semplice per annullare una particolare commit che è:

  • non nella testa o HEAD
  • è stato spinto al telecomando.

Perché non se è l'ultimo commit,

git reset HEAD

non funziona. E perché è stato spinto a un telecomando,

git rebase -i

e

git rebase --onto

causerà qualche problema con i telecomandi.

Più così, non voglio modificare la storia davvero. Se ci fosse il codice cattivo, era lì nella storia e può essere visto. Voglio solo che nella copia di lavoro, e non mi dispiace una fusione inversa commesso.

In altre parole, qual è il Git equivalente dei seguenti comandi svn :

svn merge -r 303:295 http://svn.example.com/repos/calc/trunk

che rimuove tutte le modifiche da 295 a 302 fondendo inversa tutte le variazioni di tali modifiche, come nuovo commit.

svn merge -c -302 ^/trunk

che annulla l'commit 302, naturalmente aggiungendo un altro commit che inversa unisce le modifiche da quel rispettivo commit.

ho pensato che dovrebbe essere un'operazione abbastanza semplice in Git e un caso d'uso abbastanza comune. Che altro è il punto di commit atomici?

Abbiamo messa in scena stashing e tutto per garantire i commit sono perfettamente atomico, non si dovrebbe essere in grado di annullare uno o più di tali commit atomici facilmente?

È stato utile?

Soluzione

Identificare l'hash del git log impegnarsi, utilizzando git revert <commit>, quindi utilizzare per creare un nuovo commit che rimuove questi cambiamenti. In un certo senso, git revert è il contrario della git cherry-pick - quest'ultimo si applica la patch per un ramo che manca è, il primo rimuove da un ramo che ha

.

Altri suggerimenti

Non mi piace l'auto-commit che git revert fa, quindi questo potrebbe essere utile per alcuni.

Se si desidera solo i file modificati non l'auto-commit , è possibile utilizzare --no-commit

% git revert --no-commit <commit hash>

, che è lo stesso del -n

% git revert -n <commit hash>

perché è già stato spinto, non si deve manipolare direttamente la storia. git revert tornerà modifiche specifiche da un commit utilizzando un nuovo commit, in modo da non commettere manipolare la storia.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top