2017-08-17 2 views
2

MISE À JOUR PROBLÈME DESCRIPTION: Merci d'avance!Git + Arc Diff & Réparation Diffs (travaillé à partir de [maître]!)

En travaillant dans la branche master, j'ai apporté des modifications à un fichier et arc diff --create 'ai un différentiel à examiner. J'ai alors adressé un autre user-story, fonctionnant toujours dans la branche master, et encore arc diff --create ai édité un différentiel pour l'examen. Deux user-stories, deux différentiels prêts à être revus. Bien jusqu'à présent.

[Je comprends la création d'un differential pour l'examen via arc diff, est comme faire un pull request. ]

Voici le problème ... Je me suis alors adressé de nouveau à la première user-story, en apportant d'autres changements (travaillant toujours dans la branche master, et je suis passé au arc diff <commit_hash>~ --update <diff_id>. il est mise à jour, et non des changements dans l'ensemble!

....

J'ai été dit que je aurais dû faire une nouvelle branche avant de modifier. Ensuite, tous les arc --update « s d'une révision se traduirait par une différence globale (pas la différence entre les deux dernières mises à jour)

On m'a également dit que je pouvais toujours faire en sorte que cette nouvelle branche contienne toutes mes modifications (que j'ai sous la cote arc diff) et répare les révisions.

Que dois-je écris pour créer une nouvelle branche pour contenir tous les changements (à savoir ceux qui sont déjà « arc diff » ed de révision), restaurer la branche master (soi-disant), et re arc diff --update ma dernière révision avec mon dernier commettras ? ... (/ ou tout ce qui résout mon problème.)

Répondre

1

Si vous créez une nouvelle branche de travail avant de commencer à apporter des modifications, cela fonctionne généralement automatiquement. Mais dans les cas où il n'a pas (parce que l'arc ne peut pas comprendre le point de branchement en amont), il existe des arguments de ligne de commande à diff qui vous permettent de spécifier vos intentions:

  • --update REVISIONID - Mettre à jour une révision spécifique

par exemple, arc diff --update D1

pour revenir en arrière et corriger votre arbre, commencez par créer une nouvelle branche qui tiendra votre travail en cours afin que vous puissiez toujours y revenir:

git checkout -b current_wip 

Maintenant, supprimez votre maître local et vérifiez de nouveau l'état du maître tel qu'il est sur le serveur en amont. Cela vous ramène à avant que vous ayez fait des changements, mais puisque vous avez créé la branche current_wip, vous ne perdrez rien (vous ne perdrez pas les commits même si vous avez sauté cette branche, ils deviendront simplement difficiles à trouver en raison de ne pas être attaché à une branche). Avoir un maître propre évitera aussi quelques avertissements plus tard quand vous arc land les changements.

git branch -D master 
git checkout master 

Maintenant, vous pouvez recréer vos deux patches d'origine, mais sur des branches séparées cette fois. arc patch peut être utilisé pour extraire les patchs de Differential, et crée automatiquement une branche pour vous avec le nom arcpatch-D1 (où D1 est l'identifiant diff).Ici, je les appelle D1 et D2, mais vous utiliserez les identifiants réels que la diffusion a assignés à vos diffs lorsque vous les avez soumis.

arc patch D1 
git checkout master 
arc patch D2 

Maintenant vous avez juste à faire le dernier changement que vous avez fait, que vous voulez appliquer en plus de D1.

git log current_wip 

Notez les premiers chiffres de l'ID de validation. Pour un référentiel comportant moins de quelques milliers de validations, vous n'avez probablement besoin que des 5 premiers chiffres. Même les grands dépôts comme le noyau Linux identifient généralement de manière unique le commit dans les 7 premiers chiffres. Ci-dessous, je l'appelle 1234abc, mais vous utiliserez l'ID de validation réel.

Ensuite, vous allez revenir à la branche avec le premier correctif que vous avez créé, et sélectionner juste ce commit. Cherry-pick ne prend que ce commit spécifique, par opposition à une fusion, qui prendrait n'importe quoi entre les deux. Après la sélection, à condition de ne pas avoir de conflits, vous êtes prêt à mettre à jour le diff.

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

Une fois que vous êtes heureux que tout est en toute sécurité différentiel (ou si vous souhaitez peut-être attendre jusqu'à ce que vous arc land les deux patches), vous pouvez supprimer la branche current_wip que vous avez utilisé comme une sauvegarde.

git branch -D current_wip