Удаление файла из ветки в 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 затем совершить.

Всякий раз, когда я удалял файл из одной из моих веток (которую я называл входом в систему), он не удалялся из главной ветки.

  1. Я переключился на ветку входа в системуgit checkout login
  2. Удален файл test.html.git rm --cached test.html
  3. Добавлено все в зону подготовкиgit add .
  4. Зафиксировал изменения с помощьюgit commit -m 'removed test.html file'
  5. Переместил локальный репозиторий в удаленный репозиторий Github с помощьюgit push
Другие вопросы по тегам