2016-02-16 2 views
0

У меня есть git-репозиторий в моей папке разработки, а другой, который я использую в качестве стабильной базы для тестирования моей команды. Оба находятся на одной машине.Git fetch/merge on changedded commit not working

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

git fetch orgin 
git merge origin/master 

из моей тестовой папки.

На этот раз я сделал фиксацию в папке разработки, как обычно, полученную и объединенную в тестовую папку, и все работало нормально.

Но потом я понял, что оставил отладочный файл в одном из файлов, поэтому я удалил строку отладки, поставил и исправил предыдущую фиксацию в папке разработки, но когда я попытался извлечь и слить тестовый каталог, он показал следующее сообщение:

[email protected]:/opt/testfolder$ git fetch origin 
remote: Counting objects: 47, done. 
remote: Compressing objects: 100% (23/23), done. 
remote: Total 25 (delta 16), reused 0 (delta 0) 
Unpacking objects: 100% (25/25), done. 
From /home/user/dev/php/devfolder 
+ 4dcc4dd...e48254a master  -> origin/master (forced update) 
[email protected]:/opt/testfolder$ git merge origin/master 
Merge made by the 'recursive' strategy. 

И исправленный файл не обновлялся. Если я попробую снова, я получу «Уже обновленный». сообщение.

Как это исправить? вопросы по Stackoverflow по этому вопросу не связаны с мерами. Или, по крайней мере, я не мог найти. Я также не мог найти никакой документации по этому виду ошибок из исправленных коммитов.

Любая помощь приветствуется, спасибо.

ответ

0

Так что если я правильно вас понимаю, вы делаете коммиты непосредственно в репо (/ home/user/dev/php/devfolder), который также используется как удаленный. Если это так, то правило «никогда не переписывать историю (т. Е. -amend) на коммитах, которые были перенесены на удаленный« становится », никогда не переписывает историю, период». Это связано с тем, что каждый фиксатор, который вы делаете в /home/user/dev/php/devfolder, можно считать сразу же «нажатым», поскольку другие репозитории вытягиваются из него. Случилось так, что вы передали файл с «отладочной линией» в папке dev, а затем втянули в тестовую папку. В этот момент, насколько git обеспокоен тем, что фиксация является частью истории. Затем, когда вы внесли исправление в devfolder, git удалил старый commit и заменил его новым (без строки отладки). Затем, когда вы снова попадаете в тестовую папку, git видит это как новую фиксацию, которая не является прямым потомком старого, а одноранговым из старого. (Вы можете сказать, что что-то происходит, когда вы видите «принудительное обновление» в сообщении выборки). Таким образом, git объединяет как исходную фиксацию, так и измененную фиксацию, и видит добавленную строку в исходной фиксации, поэтому добавляет ее в результат.

Хотя вы можете исправить это с помощью серии git reset s как в папке разработчиков, так и в тестовых папках, если кто-то еще вытащил из тестовой папки, то оскорбительное изменение просто вернется. Лучшее, что нужно сделать, это сделать исправление без изменений, которое удалит его. Если вы намереваетесь сделать это прямо в папке dev, обязательно вытащите из тест в dev.

Вперед, я настоятельно рекомендую вам создать голое репо в папке dev, которая предназначена только для удаленного пользователя. Затем внесите все изменения в «локальное» репо (как в вашем тестовом каталоге) и нажмите/вытащить/из голого репо.

Как бы в стороне, я бы выбрал одно голого репо, которое вы и ваша команда используете в качестве пульта дистанционного управления, на котором есть как стабильный, так и код разработки, причем каждый из них находится в другой ветке, а не в настройке у вас есть сейчас. Затем, когда вы хотите, чтобы ваша команда проверила его, вы просто объедините ветвь dev в стабильную.

+0

Отлично. В этом-то и дело. Я сделал новую фиксацию, и я ее исправил.Спасибо за ваши советы. Я попытаюсь их реализовать. –