/ / Wie listet man nur automatisch zusammengeführte Dateien in git auf - git, automerge

Wie man nur automatisch zusammengeführte Dateien in git - git, automerge auflistet

Gibt es einen Befehl, um nur automatisch zusammengeführte Dateien in Git nach dem Pull aufzulisten? Das automatische Zusammenführen zwingt uns nicht, den Code zu beobachten. Irgendwann musste ich explizit auf automatisch erstellte Dateien prüfen.

Git trägt geänderte Dateien in der Regel in drei einTypen verwechseln. Neue Dateien kommen oder alte Dateien werden gelöscht, automatisch zusammengeführt und conflict.if git identifiziert automatisch zusammengeführte Dateien intern, sodass ich nur dachte, es gäbe einen Befehl, der nur automatisch zusammengeführte Dateien auflistet.

Antworten:

1 für die Antwort № 1

Zur Verdeutlichung dieser Antwort beginnen wir mit ein paar Definitionen und Anmerkungen:

  • Um eine Zusammenführung durchzuführen, muss git die "Zusammenführungsbasis" finden, die (sehr lose) "ein Commit ist, bei dem der aktuelle Zweig und der zu verschmelzende Zweig die Entwicklungshistorie gemeinsam nutzen".
  • Sie führen jetzt eine Zusammenführung durch und haben entweder verwendet --no-commit oder einen Zusammenführungskonflikt bekommen. In letzterem Fall haben Sie diese Konflikte noch nicht gelöst.
  • Auf diese Weise sind in Ihrem Arbeitsbaum Dateien zum Festschreiben bereit, aber Sie haben das Festschreiben noch nicht durchgeführt.
  • Eine Zusammenführung hat nach dem Festschreiben zwei übergeordnete Festschreibungen. Eine davon ist das Festschreiben war Die Spitze des Zweigs, auf dem Sie sich befanden, kurz bevor Sie das Merge-Commit durchgeführt haben. Da Sie den Merge Commit noch nicht durchgeführt haben, wird Ihr aktueller HEAD commit ist jetzt die Spitze dieses Zweigs. Also die Phrase "the HEAD commit "below" bedeutet "die Spitze des Zweigs vor dem Zusammenführen".
  • In der Zwischenzeit brauchen wir auch ein kurzes Wort oder eine kurze Phrasefür das Festschreiben aus dem Zweig "Zu verschmelzen" (der zum zweiten übergeordneten Zweig wird). Ich werde dies als "eingehendes" Commit bezeichnen. (Ich habe diesen Begriff an keiner anderen Stelle gesehen. Ich habe ihn mir nur ausgedacht, nachdem ich einige Thesaurus-Einträge durchgesehen habe.)

Basierend auf Ihrer Kommentar-Antwort, glaube ich, dass Sie Dateien finden möchten, die haben irgendein Wechsel von der HEAD commit, d. h. diejenigen, die Änderungen aus dem eingehenden commit übernommen haben, unabhängig davon, ob git diese zusammengeführt hat oder nicht, ohne einen Konflikt zu finden.

Wenn dies richtig ist, ist die Antwort ganz einfach:

git diff --cached --name-only

wird sie auflisten. (Dies ist seitdem eine kleine Überraschung git diff --cached ohne --name-only tut nicht zeigen die nicht zusammengeführten Dateien.)

Wenn Sie nur Dateien möchten, die git erfolgreich zusammengeführt hat (oder für erfolgreich hält):

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

wird diese auflisten. (Lass das aus awkund optional verwenden -s oder --short Anstatt von --porcelain, um die Ausgabe von zu sehen git status. In diesem Fall suchen wir nach Dateien, deren Status "zusammengeführt, festschreibungsbereit" ist. Dateien mit Zusammenführungskonflikten befinden sich in M Zustand.)

Möglicherweise möchten Sie auch Dateien mit ihren Mergebasisversionen vergleichen. Das ist nicht zu schwierig außer im (etwas seltenen) Fall mehrerer Merge-Basen. Ich werde diese Details in dieser Antwort jedoch weglassen.