Je suis un peu nouveau pour Git et ce que j'essaie de faire semble que cela devrait être possible. Fondamentalement, j'ai travaillé sur le clone d'un dépôt et j'ai fait pas mal de commits locaux. Existe-t-il un moyen de voir le diff de la "somme" de tous mes changements et la version repo originale? Je suppose que cela serait possible car Git le fera essentiellement lorsque je ferai un Push
.
Voici un exemple de ce que j'essaie de faire: dans gitk, je vais voir quelque chose comme ça:
* - [mybranch] Ajout de '42' à la fin de answers.txt (validation locale)
* - Ajout de 'Hello World' à la fin de my.txt (validation locale)
* - Ajout de 'C # /. NET' au début de my.txt (validation locale)
* - <[RemoteRepo]> (dépôt d'origine à partir duquel j'ai cloné)
Comment puis-je voir la différence de la somme de toutes mes modifications à my.txt
et answers.txt
par rapport à la version originale que j'ai extraite de RemoteRepo
?
Il y a trois façons (deux autres à partir d'autres réponses données ici)
1) git diff Origin/master master
2) git diff Origin/master..master
3) git diff Origin/master...master
Le premier et le second sont identiques et montrent des changements entre les pointes du maître et du maître distant.
Le troisième montre les changements survenus sur le maître depuis la dernière poussée de la branche et je pense que c'est le plus approprié que vous recherchez
La réponse la plus prête est
git show-branch
Ce que vous pouvez faire pour plus de contrôle, c'est utiliser git log
annexe git rev-list
:
git log --left-right --graph --cherry-pick \
--oneline branchname...remote/branchname
Ceci est ma méthode préférée et se traduira par quelque chose comme
> | fff6bda remote fix
< | c8903ee local fix
< | 724373c Merge branch 'bla' into bla
|\ \
| < | 2faf547 details
| < | abbdc47 ....
|/ /
< | befc181 some tagged commit
Incluez --decorate et vous obtiendrez quelque chose de proche de gitk, git-gui et gitweb:
> | fff6bda remote fix
< | c8903ee local fix
< | 724373c (tag_4) Merge branch 'bla' into bla
|\ \
| < | 2faf547 details
| < | abbdc47 ....
|/ /
< | befc181 (tag_3) some tagged commit
git config alias.lr log --long-option1 --long-option2
'pour une utilisation pratique git config color.ui auto
'pour un soulagement immédiat des yeux Si vous vouliez toutes les têtes locales ( sur toutes les branches locales ) versus tous les validations à distance ( sur les branches idem ):
git log --decorate --pretty=oneline --all --not --glob=refs/remotes --no-walk
Quittez la non-marche pour obtenir toutes les révisions individuelles. Dans ce cas, je préfère utiliser les commutateurs illustrés précédemment (--graph --left-right)
Si vous voulez voir clairement les fusions, incluez --boundary
Git log
et rev-list
supporte toute une série de capacités de filtrage astucieux, voir la page de manuel
--after '2001-01-01'
--until 'last week'
--author 'martin'
-E -i --grep='fixes #[0123456789]+'
-S 'new_debug_function'
et bien d'autres. Cela devrait vous donner beaucoup de levier pour obtenir exactement les informations que vous souhaitez avec un effort presque nul
Ce qui réside dans les stashes, mais pas sur les télécommandes (notez qu'il n'y a aucun moyen de faire référence aux stashes sur les braches distants car les stashes résident dans les reflogs, et les reflogs (même pour les branches distantes) reflètent toujours l'histoire locale [1]):
git log $(git rev-list -g stash) --not --glob=refs/remotes
Remarques
cela inclura les masques déposés, mais pas les masques actuels
git log $ (git fsck --unreachable --full --lost-found | grep 'commit' | cut -d '' -f3)\--no-walk --not --glob = refs/remotes --oneline --décorer
À des fins de script, remplacez l'utilisation de git log
avec git rev-list
et vous obtiendrez juste les hachages (et encore plus de robustesse script-prrof)
[1] Voir également ma ou mes réponses précédentes sur la façon de transférer les stashes entre les repos:
La commande la plus simple et certainement la plus facile à retenir qui fait (généralement) ce que vous voulez est la suivante:
git diff Origin
Cela montre la différence entre ce que vous avez tiré à l'origine (l'origine) et la branche actuelle sur laquelle vous travaillez, qui est par défaut master
.
la différence peut être visualisée avec git diff A B
, il comparera le code de A à B:
git diff Origin/master master
Origin/master
est l'état de la branche maître distante lors de sa dernière extraction (ou clonage), master
est l'état local du code - sauf si vous avez changé de branche lorsque vous travaillez localement.
pour tout git diff HEAD Origin/"nameofyourbranch"
pour un fichier spécifique git diff HEAD: "filename" Origin/"nameofbranch": "filename"
git diff Origin/master..master