Как я ГИТ выборки " и " ГИТ слияния с филиалом дистанционного слежения (например, 'ГИТ тянуть')


Я установил некоторые удаленные ветви отслеживания в git, но я никогда не смогу объединить их в локальную ветвь, как только я обновил их с помощью "git fetch".

например, предположим, что у меня есть удаленная ветвь под названием "an-other-branch". Я установил это локально как ветвь отслеживания с помощью

git branch --track an-other-branch origin/an-other-branch

пока все хорошо. Но если эта ветвь обновляется (обычно я перемещаю машину и совершаю с этой машины), и я хочу обновить ее на исходной машине, я запуск в беду с fetch / merge:

git fetch origin an-other-branch
git merge origin/an-other-branch

всякий раз, когда я делаю это, я получаю "уже актуальное" сообщение, и ничего не сливается.

однако, a

git pull origin an-other-branch

всегда обновляет его, как и следовало ожидать.

кроме того, работает git diff

git diff origin/an-other-branch

показывает, что есть различия, поэтому я думаю, что у меня неправильный синтаксис.

что я делаю не так?

EDIT [2010-04-09]: я проверил пару раз, и я определенно не на другой ветке. Должен ли мой "git fetch", за которым следует "git merge" (как показано выше), делать то же самое, что и git pull? Я получу некоторый рабочий процесс, показывающий результаты состояния git и т. д.

2 106

2 ответа:

вы не получаете ветку, вы получаете весь пульт дистанционного управления:

git fetch origin
git merge origin/an-other-branch

выбор только одной ветви:fetch/mergeиpull

люди часто советуют вам отделить "выборку"от " слияния". Они говорят вместо этого:

    git pull remoteR branchB

этого:

    git fetch remoteR
    git merge remoteR branchB

что они не упоминают, так это то, что такая команда fetch будет фактически fetch все ветви из удаленного РЕПО, который является не что делает эта команда pull. Если у вас есть тысячи филиалов в удаленном РЕПО, но вы не хотите видеть их все, вы можете запустить эту непонятную команду:

    git fetch remoteR refs/heads/branchB:refs/remotes/remoteR/branchB
    git branch -a  # to verify
    git branch -t branchB remoteR/branchB

конечно, это смешно трудно запомнить, поэтому, если вы действительно хотите избежать извлечения всех ветвей, лучше изменить свой .git/config как