Risposta breve (già data dal @alex nei commenti): git reset --hard HEAD^
, ma solo se c'è un merge commit (altrimenti sei solo il backup di un impegno dal fast-forward).
Versione lunga con la spiegazione:
git pull
è in realtà solo git fetch
seguito da git merge
(a meno che non si sostituisce con --rebase
, come si nota). Quindi non vi resta che vedere se hai un merge reale commettere o no:
$ git pull
Updating 171ce6f..523bacb
Fast-forward
mp.py | 24 ++++++++++++++++++++++++
1 files changed, 24 insertions(+), 0 deletions(-)
create mode 100644 mp.py
In questo caso non vi era alcuna fusione commettere, solo un fast-forward, quindi, nessun problema-non ci sono cambiamenti di Rebase! Se fai un git log
vedrai il mancato-di-merge-commit, specialmente se fai il grafico qui sotto.
Forza unione.
$ git reset --hard HEAD^
HEAD is now at 171ce6f ignore *.log files
[ora sono uno dietro remotes/origin/master
]
$ echo '# pointless comment' >> selfref.py
$ git add selfref.py
$ git commit -m 'added to force merge'
[master 260e129] added to force merge
1 files changed, 1 insertions(+), 0 deletions(-)
$ git pull
Merge made by recursive.
mp.py | 24 ++++++++++++++++++++++++
1 files changed, 24 insertions(+), 0 deletions(-)
create mode 100644 mp.py
Possiamo vedere che questo è accaduto, anche se il testo di cui sopra manca, con:
$ git log --graph --decorate --abbrev-commit --pretty=oneline
* c261bad (HEAD, master) Merge branch 'master' of [ssh url]
|\
| * 523bacb (origin/master, origin/HEAD) add multiprocessing example
* | 260e129 added to force merge
|/
* 171ce6f ignore *.log files
Vogliamo ottenere il nome della filiale locale master
in modo che punti (in questo caso) 260e129 nuovamente. Per fortuna che è veramente facile da nome:
$ git rev-parse HEAD^
260e1297900b903404c32f3706b0e3139c043ce0
(L'altro genitore della corrente, con due genitori, merge commit è HEAD^2
.) Quindi:
$ git reset --hard HEAD^
HEAD is now at 260e129 added to force merge
e ora possiamo rebase su remotes/origin/master
(I 'll utilizzare il nome davvero breve, origin
, per citarne che):
$ git rebase origin
First, rewinding head to replay your work on top of it...
Applying: added to force merge
Ora il grafico-y spettacoli del registro una linea:
$ git log --graph --decorate --abbrev-commit --pretty=oneline
* 4a0b2e2 (HEAD, master) added to force merge
* 523bacb (origin/master, origin/HEAD) add multiprocessing example
* 171ce6f ignore *.log files
Da tutto questo, si dovrebbe essere in grado di capire cosa fare se si esegue git pull
e si lamenta che l'unione non riesce. :-)
immagino 'git resettare --hard' indietro a prima del tiro e rifare la trazione è la via. – Alex
Grazie. Puoi postare questo come risposta piuttosto che un commento? –