Я предполагаю, что ваше ожидаемое поведение, поскольку вы проигнорировали file2.txt
, заключается в том, что git не удалит его при переключении ветвей.
Но в ветви, которую вы покидаете, file2.txt
не игнорируется;на самом деле этого не может быть, поскольку он проиндексирован.И при переходе от туда master
, один из изменений является удаление file2.txt
.
1008 * Это крайний случай, когда «правильное» поведение является дискуссионным.Иногда можно ожидать (или, по крайней мере, хотеть) одного, а иногда - другого.
Но вы наблюдаете документированное поведение git.
Обратите внимание, что еслиВы также удалите file2.txt
из dev
git checkout dev
git rm --cached file2.txt
git echo file2.txt >> .gitignore
git add .
git commit
, а затем переключение между ветвями оставляет file2.txt
нетронутым.И если фиксация file2.txt
была в первую очередь ошибкой, то как минимум удаление из всех ветвей имеет смысл.
Проблема с этим предложением состоит в том, что в зависимости от того, что еще происходит в каждой ветке,может привести к конфликтам слияния.Их было бы довольно просто решить, но это все равно может раздражать.По этой причине (или по другим причинам) вы можете захотеть сделать редактирование истории, особенно если эти коммиты еще не были переданы другим разработчикам.
ПРИМЕЧАНИЕ , что если вы делаете это, вы хотите убедиться, что вы восстановили копии рабочего дерева file2.txt
.(Если вы этого не сделаете, то все равно можно будет (на некоторое время) восстановить их впоследствии, но не так просто.) Поэтому, как только эти файлы будут безопасно восстановлены
git filter-branch --index-filter 'git rm --cached --ignore-unmatch :/:file2.txt' -- --all