2013-06-27 2 views
14

Существует некоторая информация, которую я не понимаю с помощью действия GIT pull. У меня есть репозиторий foobar git с двумя файлами: с именем f1 и f2. Прежде всего, я клонировать этот репозиторий, используя эту команду:GIT pull: замените местную версию удаленной версией

git clone [email protected]:foobar/foobar.git 

я сделать некоторые неправильные изменения на обоих f1 и f2 файлы, добавьте их в мерзавец индекс и совершить то.

git add -A 
git commit -m 'a test wrong modification' 

Теперь я решил, что эти изменения были неправильными, и я хочу заменить мои файлы удаленной версией. Поэтому я использую git pull для этого:

git pull 

Already up-to-date. 

GIT отвечает, что проект уже обновлен. Кто-нибудь может мне помочь? Что в этом плохого ? Как перейти к замене моей локальной версии удаленной версией? Спасибо, Бен.

ответ

32
git fetch origin 
git reset --hard origin/master 

Вот хорошее объяснение о мерзавец тянуть git pull

The git fetch команда импортирует коммиты из удаленного хранилища в локальном репо. Полученные коммиты хранятся как удаленные ветви вместо обычных локальных ветвей, с которыми мы работали. Это дает вам возможность просмотреть изменения, прежде чем интегрировать их в свою копию проекта.

Команда git pull <remote> извлекает копию указанного удаленного пульта и немедленно объединяет его в локальную копию. Это то же самое, что и git fetch <remote>, а затем git merge origin/<current-branch>. Поскольку он выполняет слияние, ваши коммиты все еще были там.

После выполнения fetch вы можете сбросить свою рабочую копию командой сброса. Hard - игнорировать любые изменения в вашей локальной копии. git reset --hard origin/master

+3

Вы правы (хотя первое не обязательно, если все изменения уже доступны локально), но, вероятно, это поможет OP, если вы объясните, что делают эти команды. – hvd

+1

добавлено объяснение проблемы – Tala

+0

Что делать, если мы хотим заменить конкретный файл не всем из orgin/master? –

2

Для сброса определенных файлов, используйте git checkout:

git checkout HEAD f1 
git checkout HEAD f2 

Вы могли бы также использовать подстановочные знаки (*), но я никогда не пробовал.

Похожий вопрос: How to checkout only one file from git repository?

ресурсы на мерзавец кассе: http://gitready.com/beginner/2009/01/11/reverting-files.html

3

Натяжение в основном слить свой удаленный репозиторий с локальным. Короткий ответ - это не что-то не так с вашей настройкой git, так как ваши последние удаленные изменения уже есть в вашем локальном репозитории. Если кто-то другой вносит изменения в удаленный репозиторий, когда притяжение становится удобным. Эти изменения вытягиваются и объединяются в ваш локальный репозиторий после того, как вы сделаете попытку.