Удаление файла из ветки в git также подразумевает удаление его из основной ветки?
Я только что столкнулся с ситуацией, которая кажется мне нелогичной с Git. У меня есть репо с большим количеством коммитов, поэтому на этом этапе у него только одна ветка (мастер).
Предположим, что в этой ветке есть файл с именемMyFile.txt. Теперь мне нужно создать другую ветку, потому что я хочу внести некоторые изменения в несколько файлов, и я не хочу делать это основной веткой напрямую, поэтому я запускаю:
git checkout iss53
Теперь схема выглядит так:
Хорошо, я перешел на веткуiss53, я бегу ls -l
иMyFile.txt. Одним из изменений является удаление файла MyFile.txt, поэтому:
git rm MyFile.txt
Хорошо, работаетls -l
еще раз показывает, чтоMyFile.txt больше не существует. Итак, я переключаюсь обратно в главную ветку:
git checkout master
Но... файл MyFile.txt также исчез. Моя логика говорит, что если я удалил файл в ветке, он должен быть применен только к этой ветке, так почему же файл удаляется и из главной ветви? Обратите внимание, что я еще не делал никаких коммитов, просто разветвляюсь.
Примечание: оба изображения взяты из Git-scm.
2 ответа
Ответ на ваш вопрос:
Обратите внимание, что я еще не делал никаких коммитов, просто разветвляюсь.
Если вы не фиксируете изменения, они всегда сохраняются в вашем рабочем каталоге. Переключение ветки не влияет на ваш рабочий каталог, и рабочий каталог также не влияет на ваш последний коммит. Вы видите, что файл удален, но в действительности он удаляется только из вашего рабочего каталога. Если вы хотите отменить изменения и вернуться к последнему коммиту, используйте эту команду:
git reset --hard HEAD
Таким образом, файл будет восстановлен снова.
Может быть, это не логика для вас, но такое поведение может быть полезным. Представьте, что у вас есть 2 филиала: master
а также development
и вы всегда должны работать над development
прежде чем перенести изменения в master
, Допустим, вы забыли перейти на development
прежде чем начать работать, то, прежде чем вы совершите, вы поняли, что вы находитесь на master
, Решение простое, просто переключитесь на development
затем совершить.
Всякий раз, когда я удалял файл из одной из моих веток (которую я называл входом в систему), он не удалялся из главной ветки.
- Я переключился на ветку входа в систему
git checkout login
- Удален файл test.html.
git rm --cached test.html
- Добавлено все в зону подготовки
git add .
- Зафиксировал изменения с помощью
git commit -m 'removed test.html file'
- Переместил локальный репозиторий в удаленный репозиторий Github с помощью
git push