2010-09-28 6 views
1

Je travaille sur le même projet sur deux ordinateurs différents, bureau et ordinateur portable. Parfois, j'ai besoin de faire la transition entre eux au milieu d'une tâche/fonction.Comment puis-je utiliser git rebase en toute sécurité lorsque je travaille sur plusieurs ordinateurs?

Je veux faire un commettras sur l'ordinateur portable , puis le transport (push/pull) au bureau et continuer. Ensuite, lorsque la fonctionnalité est terminée, je veux faire un nouveau commit et l'écraser avec le commit half-done.

Comment puis-je maintenant tirer/repasser sur le ordinateur portable sans confondre l'historique?

Quelle est la bonne façon de gérer cela? Après avoir fait cela, je dois aussi pouvoir publier les commits. Actuellement, je travaille directement sur la branche master, mais si je travaille sur une branche séparée, je vais le faire. Je sais comment utiliser git rebase -i, et je l'ai utilisé plusieurs fois sur le même ordinateur sans problème, vous n'avez donc pas besoin d'inclure les détails de git rebase/squash.

Répondre

2

Je le fais tout le temps et utiliser le flux de travail suivant, en utilisant github comme référentiel maître authorative quand je ne suis pas assis à un ordinateur donné:

Quand je laisse un ordinateur i toujours faire

git push -f 

Quand je suis arrivé à un ordinateur que je fais

git fetch -v 
git reset --hard origin/master # Assuming branchname is master 

tant que je fais toujours la même chose, je sais que mon dernier travail est toujours sur GitHub, et je rebasage tout ce que je veux

En général, je également mis en

git config --global push.default current 

pour pousser seulement la branche que j'ai vérifié, quelque chose que je trouve être presque obligatoire lorsque vous utilisez beaucoup de poussée forcé.

+0

Je ne suis pas sûr de comprendre. J'utilise aussi github. Mais ne risquez-vous pas que quelqu'un clone votre repo à partir de github et que plus tard vous poussiez un peu d'histoire modifiée, n'at-il pas des problèmes alors? J'ai en fait un troisième ordinateur, un petit serveur, où j'ai aussi un clone (privé) du dépôt. Je suppose que je devrais pouvoir l'utiliser comme un référentiel maître autoritaire. – Anton

+0

Je ne comprends pas complètement 'git reset - hard origin/master'. La documentation indique qu'il réinitialise le HEAD actuel à l'état spécifié. Donc, si HEAD est une branche locale 'master', et que cette branche contient d'anciennes validations qui ont été rebasées sur le référentiel maître authoring, que fait-elle? Cela fait que le maître local se réfère au même commit que l'origine/master? Et qu'arrive-t-il aux anciens commits? Lorsque je pense à une liste unique, je suppose qu'ils ne seraient pas référencés et n'apparaîtraient donc pas, par exemple, dans gitk? Sont-ils complètement supprimés? – Anton

+0

Vous pouvez utiliser n'importe quel dépôt-serveur nu en tant que maître autoritaire. L'effet de reset --hard est de simplement définir votre checkout + index local pour * ce * commit, en éliminant efficacement les changements locaux. C'est pourquoi vous poussez toujours lorsque vous quittez une machine, donc le maître contient le dernier travail que vous avez fait. Quant aux autres collaborateurs, eh bien, ils devront suivre vos rebasements, que les débutants trouvent généralement difficile – krosenvold

Questions connexes