Attualmente sto esaminando molte delle funzionalità di tracciamento dei contenuti di git. È molto bello sapere che git mi permette di capire il codice che è stato spostato da un file a un altro, ma mi chiedo come sia utilizzabile questa funzionalità quando si esegue la risoluzione dei conflitti in unioni.Come ottenere git per unire correttamente il contenuto spostato (non solo i file)
Ecco lo scenario:
Ho due file hello.cc
e bye.cc
creato. Inizio un ramo topic
e trasferisco un codice da hello.cc
a bye.cc
. Se ora faccio un git blame -C bye.cc
, posso vedere che questo codice proviene originariamente da hello.cc
che è bello sapere. Tuttavia ora passo alla diramazione originale senza il contenuto spostato e cambio del codice all'interno della sezione in hello.cc
che è stata spostata nell'altra commit. Se faccio ora un git merge topic
ottengo un conflitto per hello.cc
. Tuttavia, a meno che non utilizzi uno stile diff3 (cosa che faccio di solito però), posso solo vedere che questo metodo è stato rimosso da hello.cc
nell'altro ramo, ma non che è stato modificato in seguito. Sarebbe bello anche ottenere un conflitto su bye.cc
perché sarebbe necessario verificare se tali modifiche dall'altro ramo dovranno essere riapplicate al codice. È in qualche modo possibile?
So che posso capire manualmente, che il codice è stato spostato facendo un git blame --reverse -C topic...
. Comunque per uno mi ci è voluto un po 'per capire questa possibilità e molti altri probabilmente non lo sapranno. Per il secondo sono pigro e probabilmente dimenticherò che il codice potrebbe essere stato spostato. Inoltre non sono sicuro che funzioni quando il codice è stato spostato su più di un file.
Quale sarebbe il modo per mantenere questa situazione il più sicura possibile?
Edit:
ho appena scoperto che git blame --reverse -C hello.cc $(git merge-base HEAD topic)..topic
funziona anche per scoprire dove il contenuto spostato. E se capisco git correttamente, questo è probabilmente più veloce, perché non farà una ricerca completa del contenuto nel repository completo.
Edit:
ho caricato il repository che sto usando per giocare intorno a github in modo da poter provare la fusione per te stesso. Il commit in cui ho spostato la funzione è nel ramo dell'argomento. Il commit in cui la stessa funzione viene cambiata in master presso HEAD del ramo merge_here
. C'è un ulteriore commit in master in cui stavo giocando con alcune altre tecniche di fusione, che dovresti ignorare per questa domanda.
Si certo . Lo so. Ma qual è il modo migliore per ottenere git per darmi suggerimenti e avvertimenti su cosa mettere nel commit, sia attraverso l'uso di strumenti o attraverso conflitti di fusione. – LiKao