Git-репозиторий на сервере отменяет мои изменения, но имеет тот же журнал, что и локальный - PullRequest
2 голосов
/ 27 октября 2019

У меня действительно странная проблема, которую я не могу решить, хотя я ищу в течение 4 часов.

По сути, у меня есть хранилище Git на сервере. Мне удалось клонировать этот репозиторий локально через SSH.

Если я делаю локальные изменения, я могу отправить их на сервер. Но сервер отменит мои изменения.

Шаг 1: внесение локальных изменений

Я добавляю файл test.php локально. Это появляется, если я делаю git log. enter image description here

Шаг 2: отправка моих изменений

Я отправляю свои изменения в удаленный репозиторий. Там нет ошибки. enter image description here

Шаг 3: проверьте репозиторий сервера

Если я ssh на сервер и сделаю git status, он не должен показывать локальных изменений. Тем не менее, он показывает изменения, которые должны быть зафиксированы. Эти изменения на самом деле отменяют именно то, что я только что нажал . В этом случае он удалит только что добавленный файл. enter image description here

Шаг 4: проверьте журнал на сервере

Если я запускаю git log, у меня точно такой же журнал, что и в моем локальном хранилище. enter image description here

Я действительно не понимаю, что происходит. Я могу вносить изменения, но они отменяются, как только они достигают сервера.

Любая помощь будет принята с благодарностью, потому что это сводит меня с ума, так как я не могу найти никого, кто сталкивался с той же проблемой, что ия.

Ответы [ 2 ]

4 голосов
/ 27 октября 2019

Это связано с тем, что при нажатии сервер обновляет только свою историю фиксаций и область индекса , не затрагивая ваше рабочее дерево . Таким образом, после нажатия ваше рабочее дерево на сервере остается в своем прежнем состоянии, в то время как его ветвь обновлена.

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

Если вы уверены, что все делаете правильно на своем сервере, вручную запустите git checkout -f все, на что что-то запиханочтобы убедиться, что его рабочее дерево совпадает с индексной областью.

2 голосов
/ 27 октября 2019

Ответ, предоставленный iBug, был полезен, поскольку объяснял почему мои изменения были отменены. Я попытался сделать пустое Git-репо на сервере, но это не помогло мне, так как мне нужно, чтобы файлы действительно присутствовали на сервере.

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

git config receive.denyCurrentBranch updateInstead

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

Я нашелрешение на этой странице .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...