2011-05-14 1 views

ответ

155

git pull действительно эквивалентен запуску git fetch, а затем git merge. git fetch обновляет ваши так называемые ветви удаленного отслеживания - обычно это те, которые выглядят как origin/master, github/experiment и т. Д., Которые вы видите с git branch -r. Они похожи на кеш состояния ветвей в удаленном репозитории, которые обновляются, когда вы делаете git fetch (или успешно git push).

Итак, предположим, что у вас есть пульт дистанционного называется origin, который ссылается на ваше хранилище GitHub, вы могли бы сделать:

git fetch origin 

... а затем сделать:

git diff master origin/master 

... чтобы увидеть разницу между вашим master и одним из них на GitHub. Если вы довольны этими различиями, вы можете объединить их с git merge origin/master, предполагая, что master - это ваша текущая ветка.

Лично я считаю, что делать git fetch и git merge отдельно, как правило, a good idea.

+0

Спасибо за хорошее объяснение. –

+2

, если у вас установлено дистанционное отслеживание, тогда команды немного упрощаются: «git fetch» ​​для извлечения, «git diff .. @ {u}», чтобы увидеть различия.Я никогда не могу сохранить происхождение, мастер и источник/мастер прямо, поэтому короткие команды помогают много – ChrisBob

+0

Я пробовал ваш метод и не получал никаких выходов из 'git diff master origin/master' и его противоположности, но' git status' сообщает me 'Ваша ветка опережает« происхождение/мастер »на 4 коммита.« Что происходит? – Jason

27

Если вас не интересуют данные, которые выводятся git diff, вы можете просто запустить git cherry, который выведет список сообщений о том, что удаленная ветка отслеживания впереди вашей локальной ветви.

Например:

git fetch origin 
git cherry master origin/master 

Выведет что-то вроде:

+ 2642039b1a4c4d4345a0d02f79ccc3690e19d9b1 
+ a4870f9fbde61d2d657e97b72b61f46d1fd265a9 

Указывает, что есть два коммиты в моей удаленного филиала отслеживания, которые не были объединены в моей местной ветви.

Это также работает по-другому:

git cherry origin/master master 

покажет вам список локальных коммитов, которые вы не подтолкнули к удаленному репозиторию еще.

+1

Спасибо, только то, что мне нужно. Просто чтобы понять это: если результат git cherry пуст, чем нет ничего для сбора вишни, и мое местное репо обновлено, верно !? – eyecatchUp

+1

Да, это правильно. – braitsch

+0

Вы также можете использовать подробный вариант '-v', чтобы отображать сообщения коммитов. Например: 'git cherry -v origin/master master' будет выводить:' + 2642039b1a4c4d4345a0d02f79ccc3690e19d9b1 Исправлена ​​ошибка ' – Yoluk

4

И еще одна полезная команда, чтобы сделать это (после извлечения мерзавец) является:

git log origin/master ^master 

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

Смежные вопросы