Подтвердить что ты не робот

Git команда для проверки любой ветки и перезаписывания локальных изменений

Есть ли какая-либо команда git (или короткая последовательность команд), которая будет безопасно и уверенно делать следующее:

  • избавиться от любых локальных изменений,
  • при необходимости возьмем данную ветку из источника,
  • проверить данную ветку?

В настоящее время я застрял:

git fetch -p
git stash
git stash drop
git checkout $branch
git pull

но это беспокоит меня, потому что меня спрашивают пароль два раза (через fetch и pull). Как правило, я был бы доволен любым решением, если пароль нужен только один раз.

Несколько примечаний:

  • это часть развертывания homebrewed script для приложения (код размещен на GitHub),
  • не должно быть разницы, если ветвь уже была извлечена из источника или нет (т.е. первое развертывание новой ветки не должно в идеале требовать каких-либо дополнительных шагов),
  • script расположен на удаленной машине, к которой могут обращаться несколько человек, поэтому учетные данные не сохраняются и пользователь/пароль должны быть введены (но только один раз, если это возможно),
  • Мне не нужны какие-либо локальные изменения, я всегда хочу нетронутую копию данной ветки (дальнейшая часть развертывания script создает локальные изменения),
  • Я не могу клонировать или экспортировать свежий репозиторий каждый раз, это занимает слишком много времени.
4b9b3361

Ответ 2

Пара пунктов:

  • Я считаю, что git stash + git stash drop можно заменить на git reset --hard
  • ... или, даже короче, добавьте команду -f в checkout:

    git checkout -f -b $branch
    

    Это отклонит любые локальные изменения, как если бы git reset --hard использовался до проверки.

Что касается основного вопроса: вместо того, чтобы вытащить последний шаг, вы можете просто слить соответствующую ветку с пульта в вашу локальную ветвь: git merge $branch origin/$branch, я считаю, что он не попал в пульт. Если это так, это устраняет необходимость в учетных документах и, следовательно, затрагивает вашу самую большую проблему.

Ответ 3

git reset и git очистка может быть чрезмерной в некоторых ситуациях (и быть огромной тратой времени).

Если у вас просто есть сообщение типа "Следующие неподписанные файлы будут перезаписаны...", и вы хотите, чтобы удаленный/исходный/восходящий поток переписывал эти конфликтующие неподписанные файлы, тогда git checkout -f <branch> - лучший вариант.

Если вы похожи на меня, другой вариант - очистить и выполнить "hard" reset, а затем перекомпилировать ваш проект.