Utilisation de Git, comment trouver les changements entre le local et le distant

StackOverflow https://stackoverflow.com/questions/231211

  •  04-07-2019
  •  | 
  •  

Question

Voici deux questions différentes mais je pense qu’elles sont liées.

  1. Sous Git, comment puis-je connaître les modifications que j'ai engagées localement, mais que je n'ai pas encore transférées vers une branche distante? Je cherche quelque chose de similaire à la commande Mercurial hg sortant .

  2. Lorsque j'utilise Git, comment puis-je connaître les modifications apportées par une branche distante avant d'effectuer un pull? Je recherche quelque chose de similaire à la commande Mercurial hg incoming .

Pour la seconde: y a-t-il un moyen de voir ce qui est disponible et ensuite de sélectionner les changements que je veux effectuer?

Était-ce utile?

La solution

Git ne peut pas envoyer ce type d’informations sur le réseau, comme Hg le peut. Mais vous pouvez exécuter git fetch (qui s'apparente davantage à hg pull à hg fetch ) pour extraire de nouveaux commits sur vos serveurs distants.

Donc, si vous avez une branche appelée maître et une télécommande appelée origine , après avoir exécuté git fetch , vous devriez également avoir une branche appelé origine / maître . Vous pouvez ensuite obtenir le journal git de toutes les commandes que maître doit être un sur-ensemble de origine / maître en effectuant git log master ..origin / master . Inversez les deux pour obtenir le contraire.

Un de mes amis, David Dollar, a créé deux scripts shell git pour simuler hg incoming / outgoing . Vous pouvez les trouver à l'adresse http://github.com/ddollar/git-utils .

Autres conseils

À partir de Git 1.7.0, il existe une syntaxe spéciale qui vous permet de faire référence de manière générique à la branche amont: @ {u} ou @ {en amont} .

Pour imiter hg incoming :

git log ..@{u}

Pour imiter hg sortant :

git log @{u}..

J'utilise les alias entrants et sortants suivants pour faciliter l'utilisation de ce qui précède:

git config --global alias.incoming '!git remote update -p; git log ..@{u}'
git config --global alias.outgoing 'log @{u}..'

Ce n’est pas une réponse complète, mais git fetch extraira le dépôt distant et ne fera pas de fusion. Vous pouvez ensuite faire un

git diff master origin/master

  1. Utilisez "git log origin..HEAD"

  2. .
  3. Utilisez " git fetch " suivi de "git log HEAD..origin". Vous pouvez sélectionner les commits individuels à l’aide des identifiants de validation répertoriés.

Ce qui précède suppose bien entendu que "origine" est le nom de votre branche de suivi à distance (ce qui est le cas si vous avez utilisé le clone avec les options par défaut).

Il y a aussi ceci, pour comparer toutes les branches:

git log --branches --not --remotes=origin

Voici ce que dit la page de manuel de git log:

  

Affiche tous les commits qui sont dans l'un des   branches locales, mais pas dans l'un des   branches de suivi à distance pour l'origine   (ce que vous avez cette origine ne l’est pas).

Ce qui précède concerne sortant . Pour entrant , il suffit d'échanger:

git log --remotes=origin --not --branches

je ferais

$ git fetch --dry-run

pour hg entrant et

$ git push --dry-run

pour hg sortant .

git-out est un script qui émule hg sortant de manière assez précise. Il analyse par & push; push -n " sortie, donc elle produit une sortie précise si vous devez spécifier des arguments supplémentaires à pousser.

git entrant

$ git fetch && git log ..origin/master --stat
OR
$ git fetch && git log ..origin/master --patch

git sortant

$ git fetch && git log origin/master.. --stat
OR
$ git fetch && git log origin/master.. --patch

Lorsque le "journal git" " et @ {u} réponses m'ont initialement indiqué "révision inconnue". erreurs, j’ai essayé la suggestion de Chris / Romkyn de git push --dry-run .

Vous obtiendrez un résultat tel que "5905..4878 master- > master". 5905 est la dernière validation de la télécommande et les validations par l’intermédiaire de 4878 seront appliquées à la télécommande.

Vous pouvez ensuite utiliser 5905..4878 comme arguments de plusieurs autres commandes git pour obtenir plus de détails:

git diff 5905..4878 # Gives full code changes in diff style

git log --online 5905..4878 # Displays each commit's comment

Lorsque vous effectuez git fetch, tout le contenu, y compris les branches et les balises (refs), est stocké temporairement dans .git / FETCH_HEAD dont le contenu peut être visualisé à l'aide de la commande suivante: journal git FETCH_HEAD Si vous n'utilisez pas le suffixe -a avec gitfetch, le contenu de FETCH_HEAD sera remplacé par défaut par le nouveau contenu. À partir de ces contenus, vous pouvez afficher et décider de la branche que vous souhaitez fusionner si vous le souhaitez ou vous pouvez simplement sélectionner des cerises si vous ne souhaitez que quelques modifications de ce qui a été importé par fetch.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top