Parfois, je rencontre le problème d'avoir du code non engagé sur un poste de travail qui n'est pas prêt pour une validation mais doit être complété sur un autre poste de travail ou ordinateur portable.
Quelqu'un at-il une solution à ce problème, comme un «soft commit» ou une autre façon de transférer les modifications sur une autre machine pour les travailler ailleurs?
Je préférerais ne pas être obligé de valider et de pousser des changements qui ne sont pas correctement mis en œuvre.
git stash
...?Réponses:
Ce qui suit suppose que votre dépôt local est un clone d'un dépôt sur un autre serveur, par exemple github; et que vous avez le droit d'apporter des modifications au serveur en amont. Dans mon exemple, j'ai appelé ce dépôt en amont «origine». Exécutez
git remote show
pour répertorier les autres référentiels, cela peut vous donner un indice sur son nom.Je suggérerais de créer une branche, alors vous pouvez vérifier la branche sur une autre machine. En fait, si vous créez une branche dès que vous commencez à travailler, vous pouvez "valider" votre branche, avoir une trace et une sauvegarde de votre travail, sans avoir à avoir un jeu de codes stable. Une fois que vous êtes satisfait de votre travail, vous pouvez le fusionner à nouveau dans votre branche "maître".
git checkout -b MyNewBranch
git push origin MyNewBranch
git checkout MyNewBranch
git checkout master
git merge MyNewBranch
git branch
la source
git branch -d master
", je suis confus, cela ne demande-t-il pas à git de supprimer la branche master ?? (c'est l'impression que j'ai quand même de lire le manuel de la branche git)Vous pouvez utiliser
git diff
pour créer un patch puis l'appliquer sur une autre machine. Ou vous pouvez créer un commit temporaire, puis le retirer d'une autre machine. Vous pouvez même créer une branche temporaire sur une autre machine, y pousser votre commit temporaire, puis supprimer la branche.Ma méthode préférée est la deuxième: créer un commit temporaire, puis aller sur une autre machine et faire quelque chose comme ceci:
la source
git format-patch
?git diff
. Y a-t-il quelque chose qui me manque?git format-patch deadbee..badcab1e
- Il crée des.patch
fichiers pour chaque commit séparément avec un joli nom et un message de commit préservé.Je le commets . Le je le pousse à la branche personnelle , vérifiez de l'autre côté et modifiez. Et supprimez la branche personnelle lorsque vous avez terminé.
Bien sûr, vous pouvez pousser directement entre les dépôts, vous pouvez utiliser le bundle ou
format-patch
/am
, mais une branche personnelle est de loin la solution la plus simple. Et réécrire l'histoire n'est pas un gros problème tant qu'il n'est poussé vers aucune branche partagée. Dans de nombreux projets, les gens sont censés rembobiner les branches de fonctionnalités pour les rendre plus faciles à comprendre pour la révision.la source
L'approche facile est celle que vous décrivez: copiez le
.git
répertoire caché et les fichiers de projet sur une autre machine où vous pouvez soit valider et terminer, soit simplement continuer à travailler.Le
.git
répertoire est l'endroit où votre historique git est conservé, donc le conserver avec les fichiers réels conserve l'intégralité de l'historique de votre projet.Si vous avez définitivement terminé d'utiliser la machine d'origine, je recommanderais probablement cette approche.
la source
Comme d'autres l'ont répondu, avec Git, vous ne devriez pas vous soucier du code non fini dans vos branches personnelles. Cependant, si pour une raison quelconque, vous ne voulez vraiment vraiment pas que votre travail inachevé touche le référentiel principal, vous pouvez utiliser la nature distribuée de Git!
Il existe un outil simple nommé
git bundle
qui peut vous aider à transmettre facilement les modifications sans référentiel central. Tout d'abord, clonez le dépôt:apporter des modifications et les valider dans une branche temporaire:
Maintenant, regroupez les modifications:
Vous avez maintenant un fichier groupé que vous pouvez envoyer à votre nouvelle machine. Comment l'utilisez-vous là-bas? Créons une nouvelle copie de travail:
nous devons traiter notre bundle comme une autre télécommande, afin que nous puissions récupérer les modifications
puisque le but était de transférer les modifications sans laisser de trace, nous voulons les écraser dans la copie de travail afin de perdre la validation temporaire:
et tout ce qui reste est de supprimer la télécommande temporaire:
ALTO! Les modifications ont été transférées dans la nouvelle copie de travail sans laisser de trace ni de branche ni de commit!
Mais vraiment - ce processus est assez long et lourd. C'est Git, pas SVN - il ne devrait vraiment pas y avoir de raison de ne pas pousser votre branche personnelle vers le référentiel central.
la source