Почему я не могу дергать себя за нерелевантные локальные изменения? - PullRequest
0 голосов
/ 26 сентября 2018

В git вы не можете сделать git pull, если у вас есть какие-либо незафиксированные изменения, выдавая следующую ошибку:

ошибка: невозможно извлечь с помощью rebase: у вас есть неотмеченные изменения.

ошибка: зафиксируйте или спрятайте их.

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

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

Есть ли какое-нибудь решение, чтобы упростить его?

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Следует отметить, что это поведение зависит от вашей конфигурации.При использовании поведения pull по умолчанию - «извлечение и объединение» - вы можете иметь локальные изменения, и pull будет работать до тех пор, пока изменения в объединении не влияют на тот же файл (ы), что и локальные изменения.

Однако при выполнении rebase мерзавец более осторожен.Вы можете спорить о том, является ли это необходимым, или же оно мотивировано техническими подробностями того, что входит в rebase, что, возможно, вы думаете, что пользователю не нужно беспокоиться.Но в любом случае, это поведение git.

Если вы действительно хотите, чтобы это было автоматически, вы можете использовать автоматическое копирование.Самый простой способ - сказать

git pull --autostash

Если вы хотите, чтобы он был еще более автоматическим, вы можете установить значение конфигурации rebase.autostash на true.Тем не менее, это делает автоматическое сохранение по умолчанию для всех перебазировок в пределах значения конфигурации (т. Е. В репо или на вашем компьютере, если вы сконфигурируете это с опцией --global).Это означает, что вы получите попытку перебазирования (и потенциально трудно распутать конфликты), когда вы перебазируете с грязным рабочим деревом.autostash считается опцией «использовать с осторожностью», поэтому я не рекомендую настраивать его как значение по умолчанию.

В этом отношении, даже если вы просто используете аргумент --autostash в pull,тебе следует быть осторожным.Сам факт того, что вы выполняете пуллзу на основе ребаз, задокументирован как «потенциально опасный», поэтому вы должны быть уверены, что знаете, что делаете, когда накладываете autostash поверх этого.

0 голосов
/ 26 сентября 2018

Вы можете использовать git pull --rebase --autostash.Это, по сути, сохраняет ваши локальные изменения, извлекает данные с удаленного компьютера, перезагружает поверх него и выдает стэш в одной команде.

Обратите внимание, что вы также можете настроить эти флаги для поведения по умолчанию:

$ git config pull.rebase true
$ git config rebase.autoStash true

Но с большой силой приходит большая ответственность, используйте эту опцию, только если вы абсолютно уверены в том, что делаете.

...