Question
Quelles sont les commandes Git pour effectuer le workflow suivant?
Scénario
J’ai cloné à partir d’un référentiel et j’ai fait quelques commits sur mon référentiel local. En attendant, mes collègues ont fait des commits dans le référentiel distant. Maintenant, je veux:
Vérifiez s’il y a de nouveaux commits d’autres personnes sur le référentiel distant, par exemple l’ origin
?
Disons qu’il y a eu 3 nouveaux commits sur le repository distant depuis mon dernier appel, je voudrais modifier les commits du repository distant, à savoir HEAD~3
avec HEAD~2
, HEAD~2
avec HEAD~1
et HEAD~1
avec HEAD
.
Après avoir su ce qui a changé à distance, je veux obtenir les derniers commits des autres.
Mes découvertes jusqu’à présent
Pour l’étape 2: je connais la notation du caret HEAD^
, HEAD^^
etc. et la notation tilde HEAD~2
, HEAD~3
etc.
Pour l’étape 3: C’est, je suppose, juste une git pull
.
Vous pouvez git fetch origin
pour mettre à jour la twig distante de votre référentiel afin de pointer vers la dernière version. Pour un diff contre la télécommande:
git diff origin/master
Oui, vous pouvez également utiliser la notation caret.
Si vous souhaitez accepter les modifications à distance:
git merge origin/master
git remote update && git status
J’ai trouvé ceci sur la réponse pour vérifier si la traction était nécessaire dans Git
git remote update
pourgit remote update
àgit remote update
vos références distantes. Ensuite, vous pouvez faire plusieurs choses, telles que:
git status -uno
vous indiquera si la twig que vousgit status -uno
est en avance, en retard ou divergente. S’il ne dit rien, le local et le distant sont les mêmes.
git show-branch *master
vous montrera les commits dans toutes les twigs dont le nom se termine par master (par exemple master et origin / master).Si vous utilisez
-v
avecgit remote update
àgit remote update
vous pouvez voir quelles twigs ont été mises à jour, vous n’avez donc pas besoin de commandes supplémentaires.
Un bon moyen d’avoir une vue synthétique de ce qui se passe “d’origine” est:
git remote show origin
Une solution potentielle
Grâce à la solution d’ Alan Haggai Alavi, j’ai trouvé le workflow potentiel suivant:
Étape 1:
git fetch origin
Étape 2:
git checkout -b localTempOfOriginMaster origin/master git difftool HEAD~3 HEAD~2 git difftool HEAD~2 HEAD~1 git difftool HEAD~1 HEAD~0
Étape 3:
git checkout master git branch -D localTempOfOriginMaster git merge origin/master
J’utilise juste
git remote update git status
Ce dernier rapporte ensuite le nombre de commits derrière mon local. (si seulement)
puis
git pull origin master
pour mettre mon local à jour 🙂
Ma question habituelle est plutôt «quelque chose de nouveau ou de repo», alors ce qui est intéressant est utile. Je l’ai trouvé ici .
git whatchanged origin/master -n 1
git status
ne montre pas toujours la différence entre master et origin / master même après un extraction. Si vous souhaitez que la combinaison git fetch origin && git status
pour fonctionner, vous devez spécifier les informations de suivi entre la twig locale et l’origine:
# git branch --set-upstream-to=origin/
Pour la twig principale:
git branch --set-upstream-to=origin/master master
car il n’a pas été suggéré jusqu’à présent … et je le trouve très utile …
j’utilise simplement
git fetch origin
pour récupérer les modifications à distance, puis je visualise les commits distants locaux et en attente (et leurs modifications associées) avec le bel outil gitk ( https://git-scm.com/docs/gitk ) impliquant l’argument –all comme
gitk --all