git mv a bash скрипт для переименования папки указанной ветки c внутри изменяет все ветви - PullRequest
0 голосов
/ 24 марта 2020

Я не совсем уверен, что это проблема macOS / zsh Speci c, поэтому я все равно собираюсь добавить теги. Рассмотрим этот фиктивный репозиторий с некоторыми фиктивными папками и файлами:

test_20200324:master
   |-> test_folder_one
   |     |->....
   |-> test_folder_two
   |     |->....
   |-> test_files...
   |-> setup.sh

и веткой master. setup.sh получает указание создать новую ветку, оформить заказ и переименовать папку:

git branch production
git checkout production 

git mv test_folder_two test_folder_four

теперь, после запуска скрипта, я ожидаю увидеть новую ветку:

test_20200324:production
   |-> test_folder_one
   |     |->....
   |-> test_folder_four
   |     |->....
   |-> test_files...
   |-> setup.sh

в то время как содержание главной ветки не повреждено. Тем не менее, по какой-то причине скрипт испортил весь репозиторий (к счастью, я не запускал это на реальном производстве!). Скрипт переименовал эту указанную c папку во всех ветках. И главная ветвь также имеет свою папку test_folder_two, переименованную в test_folder_four. Буду признателен, если вы поможете мне понять, в чем проблема и как я могу ее решить.

1 Ответ

1 голос
/ 24 марта 2020

Когда вы запускаете git mv, это изменение является частью вашего рабочего состояния дерева (а также поэтапно в смысле, описанном в Что означает «этап» в git? ), но не пока часть вашей ветви.

Это означает, что если вы изменили ветви, а git не , то попытайтесь сохранить изменения рабочего дерева (например, mv), тогда ваши изменения будут просто отброшены.

Выбрасывать чью-то работу плохо - это не то, что должна делать система контроля версий. Таким образом, когда вы переключаетесь с одной ветви на другую, git пытается применить незафиксированные изменения рабочего дерева к этой новой ветви (и если они конфликтуют / не могут быть применены, отказывается завершить извлечение).


Итак, как вы можете предотвратить это?

Просто запустите git commit -m 'Renamed folder two to four', и изменение будет надежно введено в ветку, которую вы уже проверили, вместо того, чтобы следовать вашему рабочему дереву.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...