Je travaille très souvent sur certaines fonctionnalités de mon projet dont j'ai besoin de faire une pause avant qu'il ne soit assez bon pour un commit. Cependant, j'utilise quotidiennement deux ordinateurs différents pour coder (mon ordinateur portable et mon bureau de laboratoire de recherche). Par exemple: je travaille sur une fonctionnalité à la maison, puis je m'arrête et je vais à mon laboratoire.
Je ne veux pas mélanger la synchronisation du cloud (par exemple Dropbox) avec le suivi à distance GitHub.
J'ai simplement commis des états inachevés (et désordonnés) de mon code avant (et je l'ai poussé) uniquement dans le but de le récupérer dans l'autre ordinateur pour continuer le travail. Je suis presque sûr que c'est une mauvaise pratique.
Aujourd'hui, cependant, je suis tombé git stash
un peu sur Google. Cela semble être la solution parfaite pour ce dont j'ai besoin.
Cependant, la documentation ne dit pas si elle va à github une fois que j'ai poussé mes modifications. En plus de cela, je veux savoir s'il existe un moyen plus efficace d'accomplir la mobilité dont j'ai besoin.
Merci d'avance!
Réponses:
C'est OK de commettre un travail inachevé malpropre. Faites votre travail dans une branche thématique. Engagez-vous tôt et engagez-vous souvent. En savoir plus sur Quand valider le code? pour quelques directives sur le moment de faire un commit. Spécifiquement pour Git, validez dans une branche de sujet et poussez-la aussi souvent que vous le souhaitez.
Si cette branche de rubrique vous est destinée, validez et envoyez du code cassé. Vous ne devez defer de pousser un code erroné à une branche qui est utilisée par d' autres personnes. N'hésitez pas à casser votre propre code.
la source
Les cachettes sont destinées à un usage local, comme un endroit temporaire pour mettre des choses pendant que vous vous amusez avec des branches.
Si vous êtes le seul à travailler sur une branche, il n'y a aucun problème à valider du code cassé. Ce que je fais dans des situations similaires, c'est faire un commit cassé, puis après l'avoir tiré à l'autre emplacement, faire un
git reset HEAD~1
pour l'annuler. Bien sûr, cela nécessite une utilisation--force
sur vouspulls
etpushes
lorsque vous changez de lieu.Ou j'attends juste mon premier commit et fais un
git commit --amend
. Ou je supprime simplement toutes les validations rompues lorsque je valide la branche de fonctionnalité. Ou je ne m'inquiète tout simplement pas de quelques commits cassés clairement marqués dans mon histoire, car j'ai tendance à ne pas partir tant que je ne suis pas à une bonne étape. Il y a beaucoup d'options.la source
--amend
donc cela nécessite--force
des poussées. Mieux vaut ne s'engager que dans une branche jetable.stash
n'est pas vraiment satisfaisant pour autre chose que de nettoyer votre répertoire de travail pour «débrancher votre branche»; si vous nestash pop
retournez pas immédiatement l'état, les choses deviendront très confuses.S'il y a du travail réel à enregistrer, même si ce n'est pas bon pour une entrée de référentiel permanent, il doit toujours s'agir d'un commit. En fait, je ne laisse jamais mon répertoire de travail dans un état qui n'est pas sous contrôle de version - j'utilise des scripts Python très simples pour enregistrer chaque modification en tant que commit temporaire. Si vous voulez essayer, voici ce qu'il faut faire:
git-tmp-commit
. Il valide automatiquement toutes les modifications dans une nouvelle branche unique.ccd
script, qui vérifie en fait tout, de zéro à un dossier temporaire , en choisissant automatiquement la branche la plus récente ... mais vous pouvez également simplement récupérer et extraire manuellement la branche àtemporary-commits/original-branch/YYYY-MM-DD...
partir d'un clone existant du référentiel.git-tmp-commit -r
. Cela vous ramènera à la branche d'origine † (par exemplemaster
) et laissera les modifications de la validation temporaire dans le répertoire de travail, afin que vous puissiez continuer ici jusqu'à ce qu'il soit temps pour une validation correcte (ou temporaire, si vous devez repartir).† La façon dont le script est écrit en ce moment, cela ne fonctionne que s'il n'y a pas de branche
master
dans le référentiel de paiement . Donc, dans le doute, vous devriez le fairegit branch -d master
; ce n'est évidemment pas vraiment idéal ...la source