Я считаю, что последнее быстрее, чем первое, поэтому я обычно делаю это после git fetch
всякий раз, когда мне нужно синхронизировать локальную ветвь с удаленным. В чем разница, если вообще есть?
В чем разница между git pull и git reset - неправильное происхождение/<отрасль>?
Ответ 1
Следующие команды:
git fetch
git reset --hard origin/<branch>
отменит все локальные изменения.
Где как:
git pull
Это точно так же, как:
git fetch
git merge origin/<branch>
будет пытаться сохранить локальные изменения.
Ответ 2
$ git pull
# takes the latest changes of origin/branch (exists both local & remote changes)
$ git reset --hard origin/branch
# replace your local with origin branch history (discard local changes)
Пример: скажем, у нас есть два коммита в локальном A
, B
а в удаленном есть два коммита A
, C
Теперь, если вы потянете, то ваш локальный содержит A
, B
, C
отличие от сброса, тогда ваш локальный будет иметь A
, C
не B
Ответ 3
Они совершенно разные в том, что они делают:
git pull
: Включает изменения из удаленного репозитория в текущую ветку. В режиме по умолчанию git pull является сокращением для git fetch, за которым следует git merge FETCH_HEAD.
С помощью git reset --hard origin/branch
Git будет:
- Сделайте вашу текущую ветвь (обычно ведущую) обратно к точке
<SOME-COMMIT>
. - Затем сделайте файлы в вашем рабочем дереве и индексе ("промежуточная область") такими же, как версии, зафиксированные в
<SOME-COMMIT>
.
Примечание: всегда стоит отметить, что git reset --hard
является потенциально опасной командой, поскольку она отбрасывает все ваши незафиксированные изменения. В целях безопасности вы должны всегда проверять, что вывод состояния git чистый (то есть пустой) перед его использованием.
Ответ 4
Хорошо, давайте пример, предположим, что вы пытались слить или переустановить, и что-то пошло не так, неудачное слияние или перебаза. Это означает, что ваш текущий указатель головы испорчен, а git reset --hard origin/<branch>
он помещает вашу голову в последнюю успешную фиксацию в истории. скажем, некоторые данные добавляются в ветку, в которой вы сейчас работаете, git pull
будет принимать все удаленные изменения и добавлять или объединять с локальными изменениями.
Ответ 5
То, как вы получаете исходное обновление, более важно, чем ваша проблема с производительностью. Вы должны использовать их для конкретных случаев. Я могу привести два примера:
-
git reset --hard ...
может использоваться для обновления кода в процессе производства, если вы часто обнаруживаете, что модифицируете производственный код для отладки. Это обычно происходит на ранней стадии проекта развертывание с ленивыми мыслями. -
git pull
является наиболее приемлемым способом получения новых коммитов, и это обычно имеет смысл, что у вас не будет больших локальных изменений. Если ваши периоды фиксации больше, чем больше людей на вы, возможно, в конце концов почувствуете кишку, чтобы сделатьgit pull --rebase
или сначала выберите, затем сравните.
Git может быть явным для очень специфических потребностей вашего стиля разработки, вы можете обнаружить их в дороге. Производительность не должна быть проблемой, если вы счастливы, что ваша работа в безопасности.
Ответ 6
Эти две команды используются в основном для разных ситуаций.
git pull
pull (выборка и слияние) изменяется с удаленного на локальный, особенно другие push-фиксации на удаленный, и вы хотите, чтобы эти фиксации применялись к вашей локальной ветке.
git reset --hard origin/branch
является силой, чтобы ваша локальная ветвь указывала на фиксацию, на которую указывает начало/ветвь. Обычно для ситуации, в которой вы хотите отказаться от локальных изменений, которые вы сделали, и сохранить локальный филиал как удаленный статус.