git - вернуть индекс обновления/игнорируемый файл, чтобы я мог изменить ветку?

Я пытался добавить журнал ошибок в свой файл .gitignore и где-то по пути прочитал, что мне нужно было специально отменить отслеживание файла после его добавления в .gitignore. Каким-то образом я использовал это для этого:

git update-index --assume-unchanged Logs/Err.log

Все выглядело хорошо, пока я не переключился на свою ветку разработки для слияния. Я не могу менять ветки. Я получаю следующую ошибку:

Ваши локальные изменения в следующих файлах будут перезаписаны при извлечении: Logs/Err.log

Тем не менее, когда я запускаю git status --s из моей текущей ветки, я получаю «ничего для фиксации, рабочий каталог чист»

Я где-то накосячил. Как я могу «на самом деле» игнорировать этот журнал ошибок? Как мне вернуться к моей предыдущей команде без обновления индекса?


person jleach    schedule 18.01.2016    source источник
comment
Вы пробовали stackoverflow.com/a/17195901/1657076?   -  person venkatKA    schedule 18.01.2016
comment
Не нашел этого в моем поиске... должен найти сейчас, урок усвоен.   -  person jleach    schedule 18.01.2016


Ответы (2)


Исходя из моего собственного опыта, выполнение git update-index --assume-unchanged работает только в той ветке, в которой вы его выполняете. На самом деле это не меняет внешний вид базового индекса, а только маскирует его для операций, происходящих в этой ветке. Поэтому, когда вы переключаете ветки, Git все еще «видит» грязный файл. Если вы хотите переключить ветки, вы можете попробовать следующее:

git stash

or

git reset --hard HEAD

Конечно, вы должны сначала отменить update-index:

git update-index --no-assume-unchanged Logs/Err.log
person Tim Biegeleisen    schedule 18.01.2016
comment
Хм, --no-assume-untchange... Интересно, чем это отличается от --add... Я буду RTFM (как я и должен был сделать в первую очередь...) - person jleach; 18.01.2016
comment
То, что вы делаете в своем ответе, кажется мне взломом. Вообще говоря, если вам нужно изменить ветки, а ваш рабочий каталог грязный, вы должны либо спрятать, либо зафиксировать, либо сбросить. - person Tim Biegeleisen; 18.01.2016
comment
Это делает нас двоих (я работал над этим, пока вы публиковали свой ответ, иначе я бы сделал это предложенным вами способом). В любом случае, ветка правильно объединена с dev и теперь удалена, так как она больше не нужна. Надеюсь, никаких скрытых проблем в будущем... - person jleach; 18.01.2016
comment
но он сказал, что мой рабочий каталог чист... не должен ли git status показать мне какую-либо грязь? - person jleach; 18.01.2016
comment
Вы упустили смысл моего ответа (и документации). Когда вы переходите к git update-index --assume-unchanged, Git накладывает маску на файл, чтобы он не отображался в индексе этой ветки. Однако файл действительно все еще находится в индексе, и при попытке смены веток, вуаля, маска слетает, как и должно быть. - person Tim Biegeleisen; 18.01.2016

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

  1. Удален файл из .gitignore
  2. удалить файл
  3. беги git update-index --add Logs/Err.log
  4. зафиксировать ветку
  5. оформить заказ для разработки и слияния
  6. вернуться к предыдущей функциональной ветке

Выглядит хорошо. Теперь я могу добавить Err.log, и он подхватит изменения, поэтому ветвь снова отслеживает их. Я удалю файл, затем снова добавлю в .gitignore, и все должно быть хорошо.

Мораль:

  1. Не связывайтесь с вещами, если вы точно не понимаете, что они делают (update-index)
  2. Не пытайтесь игнорировать файл, который уже отслеживается.
person jleach    schedule 18.01.2016