2015-11-30 11 views
11

Ho fatto una domanda simile qualche giorno fa, ma non ho avuto una risposta utile, quindi voglio rendere tutto più preciso.Egit - Impossibile eseguire il checkout ora - bloccato nello stato di rebase

Ho un grande progetto come repo privato su github. Un mio amico e me ci stanno lavorando al momento. Ho importato l'intero repo in un repository locale e in eclissi e tutto è andato bene, fino a quando non sono emersi i conflitti di fusione. Ogni volta, ho un conflitto di fusione (ad esempio quando mi dimentico di tirare prima di lavorare sulle classi spesso usato), l'intero progetto nelle mie aree di lavoro eclissi passa in uno stato "rebase w/merge":

Rebase w/merge state of the project

Ora Ho notato che i conflitti di fusione sono venuti fuori. Così ho aperto la classe per unire lo strumento di fusione, ho modificato tutto ciò che dovevo cambiare e ho aggiunto di nuovo la classe all'indice.

Successivamente, ho eseguito tutte le modifiche di fusione e ho inserito tutto in upstream in master-branch (usiamo solo master fino ad ora, perché non abbiamo molta esperienza con git e vcs/svn).

Ma ora, non posso nemmeno tornare al master branch, né annullare rebase o fare altro.

ho provato:

Rightclick sulla cartella del progetto -> Team -> Passa a -> master. Checkout fail

Questa è la notifica di errore.

successivo mi è stato detto di cancellare il rebase in Git repository Vista:

Git Repo View

Ma né il mio repo locale né quella remota ha alcuna opzione relativa a rebasing.

Successivamente ho provato "checkout" nel menu della filiale locale. Stesso risultato Ho anche provato a spingere la mia filiale locale in upstream:

enter image description here

Questa è la mia preimpostata della fusione/rebase opzione, ma entrambe le opzioni di far apparire lo stesso risultato:

enter image description here

Ho esaminato il mio repository in github: tutte le mie modifiche, inclusa la risoluzione di unione, sono già state inserite nel ramo principale e sono pronte per il recupero. Il mio compagno di squadra può tirarli e può continuare a lavorare sul progetto. Ma non posso sfuggire a questo stato Rebase w/merge. Ogni volta che si verificava questo stato, dovevo eliminare tutte le risorse del progetto, eliminare il repository locale, reimportare tutto in eclissi e infine, dovevo fare ogni altra configurazione più e più volte.

Quindi: Come posso evitare questo rebase? E btw: qual è la differenza tra rebase e merging?

risposta

25

Nella vista Git Staging è disponibile un'opzione per interrompere il rebase.

enter image description here

+0

Grazie! Questa era l'opzione che ho cercato. È un po 'strano che io debba sempre abortire il rebase, che non ho avviato, ma l'abortire non ha alcun impatto sui file del server, come ho notato, quindi, dopo la fusione, semplicemente annullo e tutto va bene. TY! – Cydhra

+0

Puoi anche fare clic su 'continua'. EGit segnerà quindi rebase come fatto credo. –

0

Utilizzare l'unione monte impegnano a ramo locale.

Rebase significa cambiare il vecchio master in nuovo codice master (cioè cambiare la base del ramo) e merging significa aggiungere le modifiche al master.

È inoltre possibile provare a utilizzare la riga di comando git per risolvere tale conflitto.

Utilizzando Git Rebase/Merge Processo mentre si lavora sul brach ottenere tutti i file aggiunti e spinto al server

git add . 
git commit -m "SSSS" 
git push -u origin <BranchName> 
git checkout master 
git pull 

[A] Il Master è vecchio codice significa che è possibile unire il codice

git merge <your branch name> 
git push 

[B] master ha il codice più recente e mostra un elenco di file sono tirati da un server

$ git checkout your_branch Note: make sure you are working in your branch 
$ git rebase master 

Ora si otterrà un messaggio di conflitti in modo da iniziare a lavorare su ogni file dal basso per risolvere i conflitti ora aggiungere quel file

$ git add <filename which you just updated> 
$ git rebase --continue 

Segui sopra due comandi fino a quando tutti i conflitti sono risolti. società Master cambiato sono fusi nel vostro ramo e spinto al server < < la filiale Ora è necessario aggiornare ramo principale

$ git checkout master 
$ git merge <YOUR_BRANCH> 
$ git push 

Verifica NOTA: quando rebasing se le modifiche correnti vengono sovrascritte e non volete continuare a , eseguire -

$git rebase --abort 

Mentre si fa fondere/rebase se una finestra di messaggio appaiono di scrivere la vostra dichiarazione di impegnarsi, non c'è scampo ... scrivere qualcosa e poi fare il seguenti-

$git reset --hard HEAD~1 

[Questo comando ripristinare la corrente impegnano testa al 1 livello di nuovo a quello che è successo negli ultimi merge tornerà]

0

Se hai difficoltà a vedere la vista Staging Git o la vista messa in scena mostra il repository sbagliato , quindi fai clic sul triangolo accanto all'icona di rebase nella barra degli strumenti e fai clic su abort.

Click here

Problemi correlati