2010-02-08 5 views
16

Je voudrais utiliser git rebase afin de fusionner proprement une entité dans la branche principale (en moins de validations ou au moins en haut du journal des modifications). Notez que Je suis le seul à travailler sur le référentiel.Comment faire pour pousser/tirer Git rebase

Après avoir lu Git workflow and rebase vs merge questions, j'ai trouvé git rebase serait assez agréable et comme Micah Je voudrais git push changements recalculées simplement parce que je travaille sur les différents lieux de (ex: mon ordinateur portable, ma maison, un autre PC quelque part ...)

voici donc deux solutions (à la fusion laide bidirectionnelle):

  1. Utilisation git push -f pour pousser, puis en tirant sur une autre machine, mais la façon d'obtenir la dernière version proprement sur d'autres machines?
  2. Utilisation de fusion pour fusionner les changements de maître à la branche de fonction, git push/pull, et une fois mûre, faire une seule rebasage (dans un ou plusieurs commet proprement)

(2) serait comme ci-dessous:

git co -b feature-a 
... change files 
git push origin feature-a 
... moving to another PC 
git pull origin feature-a 
... change files 
git merge master 
... change files (not the "special rebase") 
git rebase master 
git co master 
git merge feature-a 
git branch -d feature-a 
git push origin :feature-a 

Quelle solution pensez-vous que cela fonctionnerait? Je n'ai pas encore essayé l'un ou l'autre (surtout par peur de rendre mon journal plus désordonné).

Répondre

11

Rappelez-vous que git rebase rejoue les modifications et crée de nouveaux validations. En rebasant et en forçant les poussées partout, vous allez à contre-courant de l'outil. Notez comment la section "Recovering from an upstream rebase" du début documentation git rebase (avec un accent ajouté):

rebasage (ou toute autre forme de réécriture) une branche que d'autres ont fondé le travail sur est une mauvaise idée: tout le monde en aval de celui-ci est forcé pour corriger manuellement leur histoire. Cette section explique comment effectuer le correctif du point de vue de l'aval. La solution réelle, cependant, serait d'éviter de rebaser l'amont en premier lieu.

Même si vous êtes le seul développeur, vous serez toujours les autres (du point de vue d'une prise en pension) lorsque l'on travaille dans d'autres clones. Comme vous l'avez vu, ce workflow est un problème. Laissez vos changements cuire dans les branches. Quand une branche est prête pour la prime time, puis rebase, la fusionne en master, et supprime sa branche topic. Votre vie sera plus facile si vous maintenez la durée de vie des succursales courtes et leurs champs d'application étroits.

+0

On dirait l'option (2) dans mes suggestions. – Wernight

+1

"Laissez vos changements cuire dans les branches." Je ne comprends pas ce commentaire. Il utilise déjà des branches thématiques pour de nouveaux changements.Le cœur de la question semble être de savoir comment combiner des branches distantes et rebaser sans ennuyer tout le monde autour de vous. –

13

Je m'assure toujours de valider et de pousser (-f) tout ce qui sort de toute machine que je quitte.

Quand je suis arrivé à une autre machine:

git fetch -v 
git checkout mybranch # Already checked out with old HEAD 
git reset --hard origin/mybranch 

Cela fonctionne bien parce que je sais que l'autre « moi » à différents ordinateurs Commet constamment et pousse avant de partir (et donc il n'y a aucun changement unpushed sur la machine j'arrive à)

+0

Actuellement, je crée un patch de mes modifications et je transmets le patch à la prochaine machine sur laquelle je vais travailler. Ma règle personnelle consiste à ne valider que du code qui compile proprement et passe également tous les tests. Cependant, c'est assez pénible et j'ai souvent pensé à votre approche. D'un autre côté, n'est-ce pas boueux l'histoire/reflet sur les machines? –

+0

Ceci est une très mauvaise pratique si vous travaillez avec quelqu'un d'autre. 'Push -f' supprime l'autre histoire et les force à retravailler. – rvazquezglez

Questions connexes