2016-08-03 2 views
1

KontextKann ich Referenzen außerhalb von 'refs /' dir pushen?

Wir haben einen regelmäßigen master Produktionszweig und Forking Funktion verzweigt, die dann, wenn validierte verschmolzen.

Ich war auf der Suche nach einer Möglichkeit, alte Feature-Zweige zu löschen, aber behalten Sie eine Spur, die feature/gizmo wies auf commit ea33ffc2 zeigte, wenn es zusammengeführt wurde.

Wir behalten die Standard-Commit-Nachricht beim Zusammenführen, so ist eine Möglichkeit, durch git log zu graben, um den Namen wieder zu finden; Ich habe mich gefragt, ob ich irgendwie eine explizite ref halten konnte, die nicht die Ausgabe von git log --decorate oder gitk oder gitg oder ...

ich über das Erstellen von Referenzen dachte verprügeln würde außerhalb die regelmäßige .git/refs/ Verzeichnis, zB:

git update-ref history/feature/gizmo feature/gizmo 
git branch -d feature/gizmo 

aber ich konnte keinen Weg finden, um die in .git/histroy/ gespeicherten Referenzen zurück auf origin zu schieben.

Frage

Gibt es eine Möglichkeit Referenzen schieben außerhalb von refs/ zu einer Remote-Repository zu leben?

+0

Konnten Sie nicht [Tags] (https://git-scm.com/book/de/v2/Git-Basics-Tagging) dafür verwenden? –

+0

@ EnricoCampidoglio: Ich war auf der Suche nach einer Möglichkeit, Refs zu halten, die nicht in regulären Git-Tools – LeGEC

+0

Ich sehe. Sie möchten herausfinden können, auf welchen Feature-Zweig Sie bei der Zusammenführung mit "Master" hingewiesen haben, richtig? –

Antwort

0

AFAIK, Sie können Referenzen nicht außerhalb des Verzeichnisses refs verschieben.

Sie können jedoch die Frage nach der beantworten, die die letzte in feature begehen war, bevor es in master, indem Sie diesen Befehl verschmolzen wurde:

git rev-list --merges master | xargs -i sh -c \ 
'git merge-base -- is-ancestor {}^2 feature && git show {}^2' 

Lassen Sie uns es brechen:

  1. git rev-list --merges master listet die SHA-1-Hashes der merge commits erreichbar von master
  2. xargs -i sh -c für jede dieser Hashes den folgenden Befehl
  3. git merge-base -- is-ancestor {}^2 feature ob die zweiten Eltern (referenzierten mit ^2) des merge bestimmt begehen ist ein Vorfahre der feature Zweig. Mit anderen Worten, ist dieses Merge Commit von feature gekommen?
  4. && git show {}^2 Wenn ja, dann zeigen Sie die Metadaten und das Patch dieses Commits an. Wenn Sie ein prägnanter ausgeben möchten, können Sie git show --oneline --no-patch {}^2 statt

laufen Wenn Sie diese mehrere Male ausführen gehen, Sie leicht in ein Shell-Skript setzen könnte oder sogar ein alias.

Verwandte Themen