Domanda Reimposta il ramo del repository locale come se fosse un repository remoto HEAD


Come faccio a resettare il mio ramo locale come il ramo sul repository remoto?

L'ho fatto:

git reset --hard HEAD

Ma quando corro a git status,

On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)
      modified:   java/com/mycompany/TestContacts.java
      modified:   java/com/mycompany/TestParser.java

Puoi dirmi perché ho questi "modificati"? Non ho toccato questi file? Se l'ho fatto, voglio rimuoverli.


2512
2017-10-27 00:27


origine


risposte:


È possibile impostare il ramo in modo che corrisponda esattamente al ramo remoto in due passaggi:

git fetch origin
git reset --hard origin/master

Se vuoi salvare lo stato del tuo attuale ramo prima di fare questo (per ogni evenienza), puoi fare:

git commit -a -m "Saving my work, just in case"
git branch my-saved-work

Ora il tuo lavoro viene salvato sul ramo "my-saved-work" nel caso in cui tu decida di volerlo indietro (o vuoi vederlo in seguito o diffarlo contro il tuo ramo aggiornato).

Si noti che il primo esempio presuppone che il nome del repository remoto sia "origine" e che il ramo denominato "master" nel repository remoto corrisponda al ramo attualmente ritirato nel repository locale.

A proposito, questa situazione in cui ti trovi sembra molto simile a un caso comune in cui è stata effettuata una push nel ramo attualmente estratto di un repository non nudo. Hai recentemente inserito nel tuo repository locale? In caso contrario, non preoccuparti: qualcos'altro deve aver causato la modifica imprevista di questi file. Altrimenti, si dovrebbe essere consapevoli del fatto che non è consigliabile inserire un repository non nudo (e non nel ramo attualmente estratto, in particolare).


4459
2017-10-27 01:44



Dovevo fare (la soluzione nella risposta accettata):

git fetch origin
git reset --hard origin/master

Seguito da:

git clean -f

rimuovere i file locali

Per vedere quali file verranno rimossi (senza rimuoverli effettivamente):

git clean -n -f

250
2017-12-27 06:20



Innanzitutto, ripristina il valore precedentemente recuperato HEAD del ramo upstream corrispondente:

git reset --hard @{u}

Il vantaggio di specificare @{u} o la sua forma dettagliata @{upstream} è che non è necessario specificare esplicitamente il nome del repository remoto e del ramo.

Successivamente, se necessario, rimuovere i file non tracciati, opzionalmente anche con -x:

git clean -df

Infine, se necessario, ottieni le ultime modifiche:

git pull

118
2018-02-10 20:27



git reset --hard HEAD in realtà si reimposta solo all'ultimo stato impegnato. In questo caso HEAD si riferisce al TESTO del tuo ramo.

Se hai diversi commit, questo non funzionerà ..

Quello che probabilmente vuoi fare è resettare l'origine o qualunque cosa venga richiamata. Probabilmente farei solo qualcosa del genere

git reset --hard origin/HEAD

Stai attento però. Le reimpostazioni rigide non possono essere facilmente annullate. È meglio fare come suggerisce Dan e rimuovere una copia delle tue modifiche prima di resettare.


91
2017-10-27 01:08



Tutto quanto sopra suggerito è giusto, ma spesso veramente resettare il tuo progetto, devi anche rimuovere anche i file che sono nel tuo .gitignore.

Per ottenere l'equivalente morale di cancellando la directory del progetto e ri-clonando dal telecomando è:

git fetch
git reset --hard
git clean -x -d -f

avvertimento: git clean -x -d -f è irreversibile e potresti perdere file e dati (ad esempio cose che hai ignorato usando .gitignore).


57
2017-07-23 17:48



La domanda unisce qui due problemi:

  1. come resettare un ramo locale nel punto in cui si trova il telecomando
  2. come cancellare la tua area di staging (e possibilmente la directory di lavoro), così git statusdice nothing to commit, working directory clean.

La risposta unica è:

  1. git fetch --prune  (opzionale) Aggiorna l'istantanea locale del repository remoto. Ulteriori comandi sono solo locali.
    git reset --hard @{upstream}Mette il puntatore del ramo locale su dove si trova l'istantanea del telecomando, oltre a impostare l'indice e la directory di lavoro sui file di quel commit.
  2. git clean -d --force  Rimuove file e directory non tracciati che impediscono a git di dire "directory di lavoro pulita".

29
2018-01-31 01:29



Questo è qualcosa che affronto regolarmente, e ho generalizzato la sceneggiatura di Wolfgang di cui sopra per lavorare con qualsiasi filiale

Ho anche aggiunto un prompt "sei sicuro", e un po 'di feedback

#!/bin/bash
# reset the current repository
# WF 2012-10-15
# AT 2012-11-09
# see http://stackoverflow.com/questions/1628088/how-to-reset-my-local-repository-to-be-just-like-the-remote-repository-head
timestamp=`date "+%Y-%m-%d-%H_%M_%S"`
branchname=`git rev-parse --symbolic-full-name --abbrev-ref HEAD`
read -p "Reset branch $branchname to origin (y/n)? "
[ "$REPLY" != "y" ] || 
echo "about to auto-commit any changes"
git commit -a -m "auto commit at $timestamp"
if [ $? -eq 0 ]
then
  echo "Creating backup auto-save branch: auto-save-$branchname-at-$timestamp"
  git branch "auto-save-$branchname-at-$timestamp" 
fi
echo "now resetting to origin/$branchname"
git fetch origin
git reset --hard origin/$branchname

20
2017-11-09 13:01