Удаление файла из ветки в git подразумевает его удаление и из главной ветки?

Удаление файла из ветки в git подразумевает его удаление и из главной ветки?

Я только что столкнулся с ситуацией, которая кажется мне нелогичной с Git. У меня есть репозиторий с большим количеством коммитов, поэтому на данном этапе у него только одна ветка (владелец).

Основная ветвь

Предположим, что в этой ветке есть файл с именемМойФайл.txt. Теперь мне нужно создать другую ветку, потому что я хочу внести некоторые изменения в несколько файлов и не хочу делать это напрямую в ветке master, поэтому я запускаю:

git checkout iss53

Теперь схема выглядит так:

Новая ветка

Хорошо, я перешел на веткуис53, я бегу ls -lиМойФайл.txt. Одно из изменений включает удалениеМойФайл.txtфайл, поэтому:

git rm MyFile.txt

Хорошо, ls -lснова бег показывает, что нетМойФайл.txtбольше нет. Поэтому я переключаюсь обратно навладелецветвь:

git checkout master

НоМойФайл.txtФайл тоже исчез. Моя логика говорит, что если я удалил файл на ветке, он должен быть применентольков эту ветку, так почему же файл удален извладелецА также ветку? Обратите внимание, что я пока не сделал никаких коммитов, только ветвление.

Примечание: Оба изображения взяты изGit-scm.

решение1

Ответ в вашем вопросе:

Обратите внимание, что я пока не сделал никаких коммитов, только ветвление.

Если вы не фиксируете изменения, они всегда сохраняются в вашем рабочем каталоге. Переключение ветки не влияет на ваш рабочий каталог, а рабочий каталог также не влияет на ваш последний коммит. Вы видите, что файл удален, но на самом деле он удален только из вашего рабочего каталога. Если вы хотите очистить изменения и вернуться к последнему коммиту, используйте эту команду:

git reset --hard HEAD

Таким образом, файл будет восстановлен снова.

Может быть, это нелогично для вас, но такое поведение может быть полезным. Представьте, что у вас есть 2 ветки: masterи development, и вы всегда должны работать над , developmentпрежде чем переносить изменения в master. Допустим, вы забыли переключиться на , developmentпрежде чем начать работать, а затем - до того, как вы сделали коммит - вы поняли, что находитесь на master. Решение простое, просто переключитесь на , developmentа затем выполните коммит.

решение2

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

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

Связанный контент