Удаленный файл git не синхронизирован с локальной копией, но ничего не нужно извлекать или извлекать

Недавно я начал работать над приложением Openshift node.js, но приложение не удалось перезапустить.

После анализа логов оказалось, что один файл не синхронизирован между Openshift и моим локальным ПК.

Версия Openshift имеет следующую строку (файл находится в каталоге /app-root/repo/):

var ac = require('../controllers/AdminControl.js');

Локальная версия для ПК имеет эту строку:

var ac = require('../controllers/AdminController.js');

Я могу отследить ревизию, в которой эта строка была изменена. Это было совершено и выдвинуто некоторое время назад. Я использую TortoiseGit под Windows 7, и он говорит, что нечего извлекать или извлекать.

Почему репозиторий git не «зарегистрировал» модификацию? Как я могу решить эту проблему?


person Jérôme Verstrynge    schedule 21.07.2014    source источник


Ответы (1)


Трудно быть точным, не имея самого репо, но такие вещи случаются, когда вы вносите изменения локально, а затем объединяете изменения других и выбираете свою версию. Допустим, строка 123 — это строка перед вызовом require, и в ней есть строка old, которую вы меняете на new:

$ silent-edit file.js
123s/old/new/
w
q
$ git commit -m 'change old to new'
...
$ git fetch origin; git merge origin/somebranch
[ ... conflict in file.js ... you resolve it manually by choosing your version ]
$ git commit -m 'merged upstream changes from somebranch'

Теперь вы убедились, что предпочитаете, чтобы строка 124 говорила AdminController, а не AdminControl. Он останется таким, независимо от того, сколько вы пытаетесь извлечь или извлечь, по крайней мере, до тех пор, пока в этой области не возникнет еще один конфликт слияния, и вы будете вынуждены разрешить его снова.

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

  • ты меняешь или
  • они что-то изменяют в этой строке или соседних строках, так что git получает указание еще раз просмотреть эти строки кода во время другого слияния.
person torek    schedule 21.07.2014
comment
Я работаю в одиночку над репозиторием git. Я не знаю, что вызвало проблему, но я добавил фиктивный комментарий и нажал его. Теперь файл правильный. - person Jérôme Verstrynge; 22.07.2014
comment
Кстати, другие способы войти в это состояние включают возврат элементов после слияния. К сожалению, вам нужно знать, как git на самом деле реализует слияние, чтобы точно отследить, что произошло, когда, как и т. д. - person torek; 22.07.2014