[PYTHON] [Git] J'ai essayé de faciliter la compréhension de l'utilisation de git stash en utilisant un exemple concret.

introduction

Lorsque vous utilisez Git Hub, disposez-vous des éléments suivants?

――Je souhaite continuer le développement en utilisant le contenu de la pull request lorsque je tire et reçois la confirmation d'autres personnes.

«J'ai fait une erreur dans la branche sur laquelle je travaillais, et je veux refléter le travail que j'ai fait dans la branche sur laquelle je voulais initialement travailler.

Dans un tel cas, la commande ** stash ** est pratique, je vais donc la présenter avec un exemple d'utilisation. Je vous serais reconnaissant si vous pouviez indiquer s'il existe une méthode plus pratique pour les débutants git.

Comme prémisse

L'environnement que j'utilise

À propos de stash

Qu'est-ce que ** stash **? En un mot, c'est une commande qui peut évacuer (maintenir) l'historique des modifications de la validation à la ** stash list **.

Je vais vous expliquer en utilisant un exemple concret.

Voici une procédure approximative.

--Procédure ① Créer une branche et une requête d'extraction test1.py --Procédure (2) Ajouter le contenu à test1.py en tant que branche A après la demande d'extraction --Procédure ③ Évacuer le contenu ajouté à test1.py vers la liste de cachettes git --Step ④ * Vérifiez le contenu de stash avec git stash list ** --Étape ⑤ Créer une nouvelle branche (Créer une branche B) --Étape ⑥ Tirez le contenu de la télécommande vers la branche B (la partie à tirer diffère selon l'état de la branche A) --Procédure ⑦ Confirmez la commande qui peut refléter le contenu de git stash list --Procédure ⑧ Refléter le contenu de la liste git stash

Étape ① Créez une branche et une demande d'extraction test1.py

Après avoir créé la branche A à partir de la branche principale, j'ai validé les fichiers suivants et effectué une pull request.

test1.py


#Premier commit
print("test1")

Je souhaite utiliser le fichier que j'ai validé en attendant la prochaine pull request.

Étape ② Après la demande d'extraction, ajoutez le contenu à test1.py en tant que branche A

Le contenu suivant a été ajouté à test1.py tout en conservant la branche A.

test1.py


#Premier commit
print("test1")

#Ajouter du contenu
print("test2")

Une fois enregistrées, les modifications de test1.py seront reflétées dans la partie non mise en scène comme l'image.

スクリーンショット 2020-10-15 21 53 31

Ensuite, je veux refléter ce contenu ajouté dans une branche différente. Il est possible de s'engager tel quel dans la même branche, mais en gros ce n'est pas très agréable de s'engager pendant que l'autre partie le vérifie, donc j'aimerais l'éviter. Cet exemple n'était qu'un ajout, mais en réalité, il est possible de remarquer l'erreur dans la pièce qui a été tirée à l'étape 1 et de la corriger. (Du point de vue de l'autre partie, si vous pouvez changer le contenu sans permission, vous devrez le voir depuis le début, merde!)

Étape ③ Évacuez le contenu ajouté à test1.py dans la liste git stash

Évacuez les changements. Exécutez la commande git stash dans le terminal (invite de commande pour Windows). Ensuite, le fichier test1.py dans la branche A ressemblera à ceci:

Terminal


git stash

<Après exécution>

test1.py


#Premier commit
print("test1")

Il revient au contenu du fichier lors de sa validation à l'étape ①. En d'autres termes, le contenu ajouté à l'étape 2 est évacué vers git stash list. Il n'y aura aucune modification de test1.py dans la section non mise en scène. (Cela ressemble à l'image ci-dessous.)

スクリーンショット 2020-10-15 22 08 48

Étape ④ Vérifiez la liste git stash Vérifiez la commande

Vérifiez la liste des cachettes git évacuées. La commande à utiliser est:

git stash list

(Contenu) Vous pouvez consulter la liste de cachettes git. (Exemple d'utilisation)

Terminal


git stash list

<Résultat d'exécution ci-dessous>
stash@{0}: WIP on branch_name: commit_id2 commit_comment2

Le stash @ {0} ci-dessus contient le contenu qui a été évacué précédemment. Ce 0 indique que c'est le 0e dans la liste de cachettes. S'il y en a plusieurs, spécifiez la liste de réserve que vous souhaitez utiliser avec ce numéro. Si vous l'exécutez et que rien ne se passe, cela signifie que vous n'avez pas de liste de cachettes git.

git stash show stash@{0} -p

(Contenu) Vous pouvez vérifier le contenu enregistré de la liste git stash. 0 in stash @ {0} spécifie la liste de stash que vous souhaitez vérifier lorsqu'il existe plusieurs listes de stash git. La partie -p peut être remplacée par --patch.

(Exemple d'utilisation)

Terminal


git stash show stash@{0} -p

<Résultat d'exécution ci-dessous>
#Premier commit
print("test1")
+
+#Ajouter du contenu
+print("test2")

git diff stash@{0}

(Contenu) Vous pouvez afficher le diff de la liste git stash. L'explication en mots est difficile à comprendre, veuillez donc consulter un exemple d'utilisation.

(Exemple d'utilisation)

Terminal


git diff stash@{0}

<Résultat d'exécution ci-dessous>
#Premier commit
print("test1")
-
-#Ajouter du contenu
-print("test2")

Étape ⑤ Créer une nouvelle branche (Créer une branche B)

Créez une nouvelle branche avant de la refléter. Ici, créez une branche B à partir de la branche principale.

Étape ⑥ Tirez le contenu de la télécommande vers la branche B (la partie à tirer varie en fonction de l'état de la branche A)

Après avoir créé la branche B, je tire le contenu de la télécommande, mais la partie tirante change selon que la demande de tirage de la branche A est fusionnée ou non.

  1. En cas de fusion

Utilisez git pull origin master pour refléter le contenu de la branche principale distante dans la branche B. Le contenu de test1.py à ce moment-là est le suivant.

test1.py


#Premier commit
print("test1")
  1. Si non fusionné Utilisez git pull origin A pour refléter le contenu de la branche A dans la pull request. Même avec cela, le contenu de la branche A de test1.py peut être reflété dans la branche B. Le contenu reflété est le même que ci-dessus.

test1.py


#Premier commit
print("test1")

※Remarque

Si vous corrigez la ** partie tirée ** par la méthode 2, vous obtiendrez un conflit lorsque vous essayez de fusionner la demande d'extraction de la branche B après la fusion de la demande d'extraction de la branche A. Même s'il y a un conflit, il n'y a pas de problème tant qu'il est résolu à chaque fois. Si vous ajoutez simplement la pièce tirée sans la modifier, aucun conflit ne se produira.

(Supplément) Lorsque vous souhaitez extraire le contenu de la branche A vers la branche B, vous pouvez avoir plusieurs commits dans la branche A et vous pouvez vouloir refléter le contenu de l'un d'eux. À ce moment-là, il existe une commande pratique appelée git cherry-pick. Si vous voulez en savoir plus sur le choix des cerises, il y a une personne qui l'explique de manière facile à comprendre à l'url suivante, alors veuillez vous y référer.

[git] Résumé de la manière de transférer du travail d'autres branches vers votre propre branche

Étape ⑦ Vérifiez les commandes qui peuvent refléter le contenu de git stash list

Il y a deux commandes principales qui peuvent être reflétées.

○ 1er

git stash apply stash@{0}

Après avoir reflété cela, la liste git stash restera telle quelle.

○ Deuxième

git stash pop stash@{0}

Une fois que cela est reflété, la liste de stash git sera supprimée.

Le nombre entre {} est un entier pour spécifier la liste de cachettes à refléter. Si vous ne spécifiez pas de liste de stockage, stash @ {0} est spécifié par défaut.

Étape ⑧ Refléter le contenu de git stash list

Le contenu évacué par la commande git stash pop confirmée à l'étape ⑦ est reflété comme suit.

Terminal


git stash pop stash@{0}

Fichier test1.py post-exécution

test1.py


#Premier commit
print("test1")

#Ajouter du contenu
print("test2")

Maintenant, à l'étape (1), les modifications apportées après la demande d'extraction peuvent être reflétées dans la branche B. Si vous exécutez git stash list après cela, il n'y a pas de stash @ {0}. Lorsqu'il est exécuté par git stash apply stash @ {0}, stash @ {0} reste.

URL de référence

Recommended Posts

[Git] J'ai essayé de faciliter la compréhension de l'utilisation de git stash en utilisant un exemple concret.
J'ai créé un jeu ○ ✕ avec TensorFlow
Les débutants en Python ont créé un chat BOT alors j'ai essayé de résumer comment le faire
J'ai fait un chronomètre en utilisant tkinter avec python
J'ai créé un éditeur de texte simple en utilisant PyQt
J'ai essayé d'utiliser une bibliothèque (fil conducteur) qui rend le package de threads Python plus facile à utiliser
J'ai essayé de créer une expression régulière de "montant" en utilisant Python
J'ai essayé de créer une expression régulière de "temps" en utilisant Python
J'ai essayé de créer une expression régulière de "date" en utilisant Python
J'ai essayé de créer une application todo en utilisant une bouteille avec python
J'ai créé une API Web
[Python] Qu'est-ce qu'une tranche? Une explication facile à comprendre de son utilisation avec un exemple concret
[Python] Explique comment utiliser la fonction range avec un exemple concret
J'ai lu "Comment créer un laboratoire de piratage"
J'ai essayé d'utiliser Java avec Termux en utilisant Termux Arch, mais cela n'a pas fonctionné
Quand j'ai essayé de créer un VPC avec AWS CDK mais que je n'ai pas pu le faire
J'ai essayé de créer un BOT de traduction qui fonctionne avec Discord en utilisant googletrans
J'ai essayé de faire MAP rapidement une personne suspecte en utilisant les données d'adresse Geolonia
J'ai essayé de faire un "putain de gros convertisseur de littérature"
J'ai essayé de résumer comment utiliser matplotlib de python
Comment créer un package Python à l'aide de VS Code
J'ai essayé de résumer comment utiliser les pandas de python
Comment utiliser Decorator dans Django et comment le créer
J'ai essayé de dessiner un diagramme de configuration à l'aide de diagrammes
Conseils aux débutants en Python pour utiliser l'exemple Scikit-image pour eux-mêmes 7 Comment créer un module
Comprendre comment utiliser django-filter
J'ai essayé de créer une commande de recherche de documents slack à l'aide de Kendra annoncée immédiatement à re: Invent 2019
J'ai essayé "Comment obtenir une méthode décorée en Python"
J'ai essayé d'utiliser git inspector
J'ai essayé d'automatiser [une certaine tâche] à l'aide d'une tarte à la râpe
J'ai essayé de créer une caméra de surveillance à détection de mouvement avec OpenCV en utilisant une caméra WEB avec Raspberry Pi
J'ai essayé de résumer comment utiliser à nouveau le référentiel EPEL
J'ai essayé de créer un site qui permet de voir facilement les informations mises à jour d'Azure
[Python] J'ai essayé de créer un programme simple qui fonctionne sur la ligne de commande en utilisant argparse
[5e] J'ai essayé de créer un certain outil de type Authenticator avec python
J'ai essayé d'obtenir une base de données sur les courses de chevaux en utilisant Pandas
[2nd] J'ai essayé de créer un certain outil de type Authenticator avec python
J'ai écrit des commandes Django pour faciliter le débogage des tâches Celery
Un mémorandum lors de l'acquisition automatique avec du sélénium
[Python] J'ai essayé d'implémenter un tri stable, alors notez
[3ème] J'ai essayé de créer un certain outil de type Authenticator avec python
J'ai essayé de faire un processus d'exécution périodique avec Selenium et Python
J'ai essayé d'obtenir une liste de noms AMI en utilisant Boto3
J'ai essayé de créer une application de notification de publication à 2 canaux avec Python
[4th] J'ai essayé de créer un certain outil de type Authenticator avec python
[1er] J'ai essayé de créer un certain outil de type Authenticator avec python
J'ai essayé de faire une étrange citation pour Jojo avec LSTM
J'ai essayé de créer un mécanisme de contrôle exclusif avec Go
Comment créer un bot slack
Comment créer un robot - Avancé
Comment créer une fonction récursive
[Blender] Comment créer un plug-in Blender
Comment créer un robot - Basic
J'ai essayé de vérifier à quelle vitesse la mnist de l'exemple Chainer peut être accélérée en utilisant cython
J'ai essayé de créer un système pour acquérir automatiquement le guide des programmes → l'enregistrer dans le calendrier en un jour