/ / Come elencare solo i file uniti automaticamente in git - git, automerge

Come elencare solo i file auto-uniti in git-git, automerge

Esiste un comando per elencare solo i file uniti automaticamente in git dopo aver eseguito pull. La fusione automatica non ci obbliga a guardare il codice. Qualche volta ho avuto bisogno di controllare esplicitamente i file automatizzati.

Git arruola i file modificati generalmente in tretipi di confusione. Nuovi file arrivano o vecchi file eliminati, uniti automaticamente e in conflitto. Se git identifica internamente i file automatizzati, ho pensato che ci sarebbe stato un comando per elencare solo i file uniti automaticamente.

risposte:

1 per risposta № 1

Per chiarezza in questa risposta, cominciamo con alcune definizioni e note:

  • Per eseguire un'unione, git deve trovare la "base di unione", che (molto liberamente) è "un commit in cui il ramo corrente e il ramo da unire condividono la cronologia di sviluppo".
  • Stai facendo un'unione ora e hai usato entrambi --no-commit o ottenuto un conflitto di unione. Se quest'ultimo, non hai già risolto questi conflitti.
  • Pertanto, l'albero di lavoro ha file pronti per il commit, ma non è stato effettivamente eseguito il commit.
  • Una fusione, una volta impegnata, ha due commit principali. Uno è l'impegno che era la punta del ramo in cui ti trovavi poco prima di eseguire il commit della fusione. Dal momento che non hai ancora effettuato il commit della fusione, la tua attuale HEAD commit è la punta di questo ramo ora. Quindi la frase "il HEAD commettere "sotto significa" la punta del ramo prima di fare l'unione ".
  • Nel frattempo, abbiamo anche bisogno di una breve parola o fraseper il commit dal ramo da unire (che diventerà il secondo genitore). Chiamerò questo il commit "inbound". (Non ho visto questo termine altrove, l'ho appena inventato dopo aver esaminato alcune voci del thesaurus.)

Sulla base del tuo commento-risposta, credo che tu voglia trovare i file che hanno qualunque cambiare dal HEAD commit, ovvero quelli che hanno raccolto eventuali modifiche dal commit inbound, indipendentemente dal fatto che git abbia unito o meno quelli senza trovare un conflitto.

Se questo è corretto, la risposta è abbastanza semplice:

git diff --cached --name-only

li elencherò. (Questa è una sorpresa un po 'da allora git diff --cached senza --name-only fa non mostra i file non uniti.)

Se vuoi che solo i file che git abbia (o pensi che abbia) siano stati uniti correttamente:

git status --porcelain | awk "/^M / { print $2 }"

elencherò quelli. (Lascia fuori il awke facoltativamente utilizzare -s o --short invece di --porcelain, per vedere l'output di git status. In questo caso cerchiamo i file il cui stato è "unito, pronto per il commit". I file con conflitti di unione saranno presenti M stato.)

Potresti anche voler confrontare i file con le loro versioni di merge base. Questo non è troppo difficile tranne nel caso (alquanto raro) di più basi di unione. Lascerò questi dettagli fuori da questa risposta, però.