Вы действительно, серьезно, не можете получить то, что вы хотите в Git. Причина довольно фундаментальная: файлы не отслеживаются и не отслеживаются в силу того, что они находятся в какой-либо ветви или не находятся в какой-либо ветви. Что делает файл отслеживаемым (а не отслеживаемым), так это его присутствие в (или отсутствие в) index . В то же время ветви имена просто идентифицируют один конкретный коммит , причем один коммит, который они идентифицируют, может быть изменен в любое время ... и каждый коммит может быть в много ветвей одновременно.
Эти три факта: (1) отслеживаемое по сравнению с неотслеживаемым является свойством текущего содержимого index , следовательно, напрямую не связано с каким-либо именем ветви; (2) названия ветвей изменяются со временем; (3) коммиты находятся в нескольких ветвях - все взаимодействуют так, что это довольно плохо для вашего варианта использования.
Чтобы понять это, вам нужно знать, как взаимодействуют коммиты, индекс и рабочее дерево, что происходит, когда вы используете git checkout
с именем ветки или хешем фиксации, и как ветки создаются и перемещаются в генеральный. Все они связаны в один большой Гордиев узел ... и решение вашей реальной проблемы похоже: даже не пытайтесь развязать узел, просто обойдите весь беспорядок, оставив вместо этого прототип конфигурации. Приготовьте какой-либо процесс, который вам нужен, соберите или получите его по мере необходимости: это может быть просто: если я только что запустил git checkout master
, скопируйте прототип на место; если я только что запустил git checkout
, который снимает с меня master
, удалите копию на месте, оставив только прототип.
(Если вы хотите автоматизировать это, посмотрите на post-checkout
крючок.)