Ho ribadito un ramo argomento piuttosto vecchio sul master. Poiché durante il rebase ci sono stati alcuni conflitti, mi piacerebbe confrontare il ramo vecchio argomento con quello successivo, per assicurarmi di non aver rimosso accidentalmente o rovinare nessuna delle modifiche sull'argomento. Il più vicino che ho ottenuto è diffondere i risultati di git diff master...topic
e git diff master...topic-rebased
. Questo tipo di lavoro funziona, ma c'è molta rumorosità nella differenza finale rispetto alle modifiche nel codice di contesto, numeri di linea, hash di commit, ecc., Oltre a non essere una soluzione molto solida. C'è un modo più semplice per farlo?Confronta il ramo git con il ramo rebased
risposta
Probabilmente vorrebbe diff effettive le modifiche (patch) prodotte da ciascuno:
diff <(git log master..topic -p) <(git log master..old-place-of-topic -p)
Questo potrebbe rimuovere efficacemente tutte le modifiche introdotte nel master.
Correggetemi se ho torto, ma questo mostrerebbe anche tutte le modifiche da 'git merge-base master topic' a' git merge-base master topic-rebased', che non voglio. Voglio solo visualizzare le modifiche specifiche al ramo dell'argomento. Inoltre, non ho bisogno di un reflog, ho ancora sia argomento che topic-based. – Ryan
modificato. Ora ho quello che cerchi. –
Apprezzo la risposta, ma questo ha lo stesso risultato e problemi (supponendo che intendessi "master ... old-place-of-topic") come quello che faccio attualmente (menzionato nella domanda). – Ryan
Se non ti interessa la cronologia dei commit dal ramo dell'argomento puoi rifare il rebase e aggiungere il flag --squash. Questo ti darà un singolo commit sulla parte superiore del tuo ramo master dove puoi e passare attraverso i file modificati file per file. Vorrei anche aggiungere il flag --no-commit al rebase in modo che potessi rivedere le modifiche prima di commettere il rebase git.
git checkout master
git rebase --squash --no-commit topic
//review changes with your favourite git tool
git commit
Se non si vuole rifare il rebase uno strumenti diff esterni come KDiff3 potrebbe aiutare.
Non si desidera rebase master su topic. –
Questo è vero. Ho dovuto rileggere la mia risposta, ma non riesco a vedere dove ho scritto che il master dovrebbe essere ribattezzato sull'argomento? – MikaelHalen
Non voglio rivedere le modifiche che l'argomento ha apportato, voglio rivedere le modifiche apportate (a seguito di conflitti) durante il rebase. – Ryan
Ero alle prese con questo stesso problema e ho trovato idee simili a quelle di Ryan e Adam Dymitruk e li ho trovati non molto soddisfacenti: confrontare il diff finale è complicato e inoltre non mostra dove è stato introdotto l'errore lo trovi.
Il mio flusso di lavoro corrente di rebase include il confronto di ciascun commit rebased con quello originale, in modo da individuare e correggere potenziali errori mentre appaiono e non è necessario ripetere il rebase. Sto utilizzando la seguente coppia di alias git per facilitare questo:
rc = !git diff -w $(cat .git/rebase-merge/stopped-sha) > .git/rebase-merge/current-diff
rd = !git diff -w $(cat .git/rebase-merge/stopped-sha) | diff --suppress-common-lines .git/rebase-merge/current-diff - | cut -b 1-2 --complement | less
git rc
memorizza il diff tra HEAD
l'ultima revisione dal ramo che viene calcolato su base. Dopo aver riprodotto il seguente commit, git rd
confronta questo diff memorizzato con il diff tra il nuovo HEAD
e il successivo commit sul ramo che viene ridefinito. Quindi questo mostra che solo la differenza ("errore") si presenta riproducendo quest'ultimo commit.
Dopo aver controllato il diff, chiamare git rc
per aggiornare il diff memorizzato e continuare il rebase.
Invece di chiamare manualmente git rc
e git rd
, è possibile aggiungerli al numero git-rebase-todo
in modo che vengano chiamati automaticamente dopo la ripetizione di ciascun commit.
- 1. rendere git ramo il ramo principale
- 2. Ramo SVN confronta
- 3. Git - Sostituire ramo locale con ramo remoto
- 4. Rinominare il ramo git remoto
- 5. Come clonare il ramo con git-p4?
- 6. Git avviare il ramo da un altro ramo senza rilevamento
- 7. Come si confronta un ramo con il tronco in sovversione?
- 8. Ramo git rebase con figli uniti
- 9. Git sovrascrittura matrimoniale con ramo
- 10. git push: obiettivo fissato per il ramo
- 11. Come resettare un ramo su un altro ramo con git?
- 12. Mostra solo il ramo corrente in Git
- 13. Impossibile eliminare il ramo remoto in git
- 14. Git crea il ramo dal master estratto?
- 15. Seleziona il ramo Git per TeamCity Build
- 16. Alias Git per eliminare il ramo remoto
- 17. Git - Impossibile eliminare il ramo remoto
- 18. Git: impossibile eliminare permanentemente il ramo remoto
- 19. fatale: il master ramo corrente non ha ramo a monte
- 20. Come unire il ramo gerrit ad un altro ramo gerrit
- 21. Come creare il ramo da commit specifico in ramo diverso
- 22. Unire un ramo con Git flusso mantenendo il ramo ancora vivo
- 23. Git: cambia ramo principale?
- 24. Qualsiasi scelta rapida Git per il ramo corrente e il ramo che tiene traccia?
- 25. Differenza tra git checkout --track origine/ramo e git checkout -b ramo origine/ramo
- 26. Git - rimuovi commit con changeset vuoto utilizzando il ramo filtro
- 27. Impossibile spingere il ramo master al repository git con netbeans
- 28. Come utilizzare il ramo git con Android Studio
- 29. Git elimina il ramo remoto nel repository git TFS
- 30. Perché il comando git per cambiare ramo chiamato "git checkout"?
A seconda dell'importanza della complessità, è possibile provare a ricollocarlo nuovamente e confrontare tale risultato con 'topic-rebased' ... (Si sta lavorando sul presupposto che si sarà più cauti in luoghi diversi la seconda volta .) Altrimenti, l'opzione -U su 'git diff' può ridurre il contesto e puoi provare a estrarre le intestazioni del blocco contenente i numeri di riga e gli hash del blob. – antak
Un'interessante alternativa è quella di rebase di esso (ad esempio 'master..topic-rebased') su * merge-base * (o da dove mai' topic' proviene) e confronta (diff) questo a 'topic'. Ciò si comporterebbe come una prova matematica e tutti i delta che vedete qui dovrebbero essere quelli di importanza. Il rebasing qui potrebbe essere fatto con 'cherry-pick' o' rebase upstream topic ~ 0 --onto new_base'.Non conosco il tuo livello di conoscenza, ma il "ribaltamento" in questo caso non dovrebbe comportare il blocco dei rami correnti perché mi aspetto che venga eseguito in uno stato distaccato o in un ramo a eliminazione diretta. – antak
rebasing indietro non funzionerà come risulteranno gli altri conflitti. –