Ich behebe ein Problem mit TeamCity beim Erstellen von Pull-Anforderungen für GitHub, wie in this blog post beschrieben, und ich versuche, das Checkout-Verhalten lokal zu replizieren.Warum werden Änderungen an Master nicht in meinen GitHub-Merge-Heads angezeigt?
Hier ist die Reihenfolge der Schritte mir folgenden:
// in /projects/semver_demo/master
git checkout master
echo "Hello World!" > master.txt
git add .
git commit -m "edited master.txt"
git push
git branch foo
echo "Hello World!" > foo.txt
git add foo.txt
git push
Jetzt habe ich zu GitHub gehen, offen Pull Anfrage # 123 von Ast foo
. Dann wird in einem separaten Repo, die ich in einem anderen Ordner ausgecheckt, Ich überprüfe, was ich glaube, dass der aktuelle merge Kopf seine für Pull-Request # 123:
// in /projects/semver_demo/merged
git fetch origin refs/pull/123/merge:pr123
git checkout pr123
OK, so weit, so gut - ich bin auf einem Zweig mit meinem Feature. Jetzt gehe ich zurück in meinen Arbeitsordner, simuliere einige Änderungen am Master, die - wie ich es verstehe - erscheinen sollten, wenn ich den Merge-Head erneut abrufe.
// in /projects/semver_demo/master
git checkout master
echo "Hello again!" >> master.txt
git add master.txt
git commit -m "Added another line to master.txt"
git push
Nun wechseln Sie wieder in meine feature_branch Ordner und löschen und erneut abzurufen den Merge Kopf:
// in /projects/semver_demo/merged
git checkout master
git branch -D pr123
git fetch origin refs/pull/123/merge:pr123
git checkout pr123
Wenn ich das tue, ich erwartet, dass die neue, um zu sehen „Hallo again!“ Nachricht in merged/master.txt
, aber ich bin nicht - ich sehe die gleiche Version von master.txt
, die existierte, als der Zweig erstellt wurde.
Mein Verständnis war, dass ein Merge-Kopf geben Sie das Äquivalent der Zusammenführung der aktuellen Master (oder Upstream-Zweig) in den aktuellen HEAD der Feature-Zweig - aber das ist nicht, was ich sehe. Habe ich einen subtilen Schritt verpasst, um Git zu sagen, dass er den Zusammenführungskopf "wieder zusammenführen" soll? Oder habe ich den Zweck von Merge Heads völlig falsch verstanden?
EDIT: Nach einer wenig mehr Untersuchung DOES Kopf führen die Zusammenführung Änderungen foo
drängt die neuesten Änderungen an master
zu reflektieren ... aber Änderungen an master
drücke nicht. Ich frage mich jetzt, ob dieses Verhalten von Entwurf ist?
Haben Sie den SHA für die Zusammenführung HEAD Änderung danach zweiten Abruf sehen? Ich denke eigentlich, dass die Zusammenführung HEAD nur ändert, wenn Sie die Spitze der Branche ändern, aber ich würde eine ähnliche Repro einrichten müssen und bestätigen, dass dies der Fall ist. –
@ BrendanForster Wie würde ich das überprüfen? Ich habe hauptsächlich mit Git über verschiedene GUI-Tools gearbeitet und habe daher nicht viel Erfahrung damit, direkt mit den zugrunde liegenden Datenstrukturen zu arbeiten ... –
run 'git rev-parse HEAD' nachdem du den' pr123 ausgecheckt hast 'ref - Wenn sich die Objekt-ID in beiden Anwendungen unterscheidet, bedeutet dies, dass GitHub versucht hat, ein neues Zusammenführungs-Commit zu erstellen. Sie können dann 'git show HEAD' anzeigen, um zu sehen, welche Commits es versucht hat, zu verschmelzen, und Sie können diese mit den Zweigen korrelieren, die Sie lokal haben ... –