2015-02-18 6 views
3

У меня есть локальное репозиторинг git, и мне нужно его обновить. Как бы то ни было, онлайн-репо намного опережает мою локальную копию. Я за очень медленной связью. Когда я использую мерзавца тянуть -v --progress, я начинаю видеть прогресс, но через некоторое время, я получаю эту ошибку:Git pull только определенное количество коммитов

efrror: RPC failed: result = 18, HTTP code = 200 | 5.00 KiB/s 
fatal: The remote end hung up unexpectedly 
fatal: early EOF 
fatal: index-pack failed 

Это связанно с моим очень медленным соединением. Мне нужно знать, есть ли способ получить, скажем, только первое коммитирование перед моим местным репо, чтобы проверить, могу ли я обновлять локальное репо за один шаг за раз.

Важная информация: Я хотел бы знать, есть ли способ вытащить # из коммитов перед моей локальной копией, а не конкретную фиксацию.

ответ

1

Если вы хотите, чтобы вытащить $ N фиксаций филиала $ ФИЛИАЛА вы могли бы сделать это (при условии, что вы в настоящее время находятся в $ ФИЛИАЛА):

git log $BRANCH..origin/$BRANCH --pretty=format:%H | tail -$N | head -1 | git pull origin 

Теперь шаг за шагом:

git log $BRANCH..origin/$BRANCH 

Дает список коммитов, которые отличаются между вашей локальной веткой и удаленной, а параметр --pretty=format:%H будет просто показывать идентификатор фиксации, избегая другой информации как автора, даты или сообщения фиксации.

tail -$N | head -1 

Учитывая список, tail -N даст вам последние N строк этого, и head -1 даст вам первый. Поэтому, если мы поместим их вместе, мы получим последнюю N-ю строку списка.

| git pull origin 

Будет просто потянуть идентификатор фиксации, пройденный через трубу, в вашу текущую ветку.

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