2017-08-17 3 views
2

AKTUALISIERT PROBLEMBESCHREIBUNG: Vielen Dank im Voraus!Git + Arc Diff & Repairing Diffs (Bearbeitet von [Master]!)

Im Zweig master arbeiten, habe ich Änderungen an einer Datei vorgenommen und arc diff --create 'ed ein Differential zu überprüfen. Ich wandte mich dann an eine andere User-Story, die immer noch im Zweig master arbeitete, und nochmals arc diff --create 'ed ein Differential zur Überprüfung. Zwei User Stories, zwei Differentiale, die zur Überprüfung bereitstehen. Gut soweit.

[Ich verstehe das Erstellen einer differential für die Überprüfung über arc diff, ist wie eine pull request machen. ]

Hier ist das Problem ... ich dann die erste Benutzer-Geschichte neu adressiert wird, weitere Änderungen vorzunehmen (noch im master Zweig arbeiten, und fuhr fort zu arc diff <commit_hash>~ --update <diff_id>. Die Differenz jetzt zeigt Änderungen zwischen der ursprünglich erstellt diff und es ist zu aktualisieren und insgesamt nicht ändert!

....

ich habe gesagt, ich, bevor sie Änderungen eine Niederlassung gemacht haben sollte. Dann werden alle arc --update ‚s einer Revision in einer Gesamtdifferenz führen würde (nicht der Unterschied zwischen den letzten zwei Aktualisierungen)

Mir wurde auch gesagt, dass ich den neuen Zweig immer noch so machen kann, dass er alle meine Änderungen enthält (die ich habe) und die Überarbeitungen repariere.

Was kann ich geben Sie einen neuen Zweig erstellen alle Änderungen enthalten (nämlich jene bereits ‚arc diff‘ ed zur Revision), zur Wiederherstellung der master Zweig (angeblich) und re- arc diff --update meine letzte Revision mit meiner letzten commit ? ... (/ oder was auch immer mein Problem behebt.)

Antwort

1

Wenn Sie einen neuen Arbeitszweig erstellen, bevor Sie Änderungen vornehmen, funktioniert dies normalerweise automatisch. Aber in Fällen, in denen es nicht (weil Bogen kann nicht die vorgeschalteten Verzweigungspunkt herauszufinden), gibt es Befehlszeilenargumente zu diff mit denen Sie Ihre Absichten spezifizieren:

  • --update REVISIONID - Aktualisieren Sie eine bestimmte Revision

zum Beispiel arc diff --update D1

zurück zu gehen und reparieren Ihren Baum, starten, indem Sie einen neuen Zweig erstellen, die Ihre aktuelle Arbeit in Fortschritt halten, so dass Sie immer wieder auf es gehen kann:

git checkout -b current_wip 

Löschen Sie jetzt Ihren lokalen Master und überprüfen Sie den Status des Masters wie auf dem Upstream-Server. Dies bringt Sie zurück zu bevor Sie irgendwelche Änderungen vorgenommen haben, aber seit Sie den Zweig current_wip erstellt haben, werden Sie nichts verlieren (Sie würden die Commits nicht verlieren, selbst wenn Sie diesen Zweig überspringen würden, würde es einfach schwierig werden finden, weil sie nicht an eine Verzweigung angehängt sind). Wenn Sie einen sauberen Master haben, vermeiden Sie später auch einige Warnungen, wenn Sie die Änderungen ändern.

git branch -D master 
git checkout master 

Jetzt können Sie Ihre beiden ursprünglichen Patches neu, aber auf getrennten Zweigen dieser Zeit. arc patch kann verwendet werden, um die Patches von Differential zu ziehen, und erstellt automatisch eine Verzweigung für Sie mit dem Namen arcpatch-D1 (wobei D1 die Diff-ID ist).Hier nenne ich sie D1 und D2, aber Sie werden die tatsächlichen Bezeichner verwenden, die Ihren Diffs bei der Übermittlung zugewiesen wurden.

arc patch D1 
git checkout master 
arc patch D2 

Jetzt haben Sie nur die letzte Änderung, die Sie vorgenommen haben, die Sie auf der Oberseite von D1 angewendet kümmern möchten.

git log current_wip 

Notieren Sie sich die ersten Ziffern der Commit-ID. Für ein Repository mit weniger als ein paar tausend Commits benötigen Sie wahrscheinlich nur die ersten fünf Ziffern. Selbst große Repositories wie der Linux-Kernel identifizieren das Commit im Allgemeinen eindeutig innerhalb der ersten 7 Ziffern. Ich nenne es unten 1234abc, aber Sie verwenden die tatsächliche Commit-ID.

Als nächstes werden Sie mit dem ersten Patch, den Sie gemacht haben, zurück in den Zweig gehen, und Sie werden nur das Commit darüber nehmen. Cherry-Pick nimmt nur dieses spezifische Commit, im Gegensatz zu einem Merge, bei dem alles dazwischen fehlt. Nach dem Rosinenpicken, vorausgesetzt, Sie erhalten keine Konflikte, sind Sie bereit, das Diff zu aktualisieren.

git checkout arcpatch-D1 
git cherry-pick 1234abc 
arc diff 

Sobald Sie glücklich sind, dass alles sicher in Differential ist (oder vielleicht wollen Sie warten, bis Sie arc land beide Patches), können Sie die current_wip Zweig Sie als Backup verwendet löschen.

git branch -D current_wip 
Verwandte Themen