В чем разница между git pull и git reset - неправильное происхождение/<отрасль>?

Я считаю, что последнее быстрее, чем первое, поэтому я обычно делаю это после git fetch всякий раз, когда мне нужно синхронизировать локальную ветвь с удаленным. В чем разница, если вообще есть?

Ответ 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 является силой, чтобы ваша локальная ветвь указывала на фиксацию, на которую указывает начало/ветвь. Обычно для ситуации, в которой вы хотите отказаться от локальных изменений, которые вы сделали, и сохранить локальный филиал как удаленный статус.