git объединить файл с предыдущим коммитом - PullRequest
0 голосов
/ 12 августа 2011

Я новичок, извините, если это абсолютный вопрос для начинающих.Есть ли способ объединить файл с предыдущим коммитом.

Чего я хочу добиться, так это того, что у меня есть файл настроек, в котором хранятся, ну, в общем, настройки.Когда я разветвлялся, я изменил, например, настройки БД, чтобы иметь возможность опробовать вещи.Теперь я слил эту ветку с мастером.Теперь я не хочу извлекать предыдущую версию файла настроек, потому что я внес в него некоторые изменения, которые требуются для новой функции.Поэтому я хочу объединить файл с предыдущим коммитом.

Ответы [ 3 ]

2 голосов
/ 13 августа 2011

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

Чтобы сделать это, используйте git log, чтобы найти фиксацию, которая внесла изменения, которые вы хотите отменить. Если в этом коммите ничего не изменилось, кроме того, что вы хотите удалить, все, что вам нужно сделать, это запустить git revert <commit> и все хорошо. Это основная причина, по которой я всегда помещаю любой отладочный код, который, как я знаю, я хочу удалить позже, в свой собственный коммит.

Если это не единственное изменение в коммите, еще не все потеряно, но это немного сложнее. Run:

git revert --no-commit <commit>
git reset HEAD
git add --patch
git commit
git reset --hard

Первые две команды отменяют все ваши изменения из данного коммита, но пока не фиксируют отмены. Опция --patch для git add позволяет в интерактивном режиме выбирать, какие изменения следует сохранять по одному. Затем вы фиксируете изменения, и git reset избавляется от изменений, которые вы не хотели сохранять.

В этом ответе предполагается, что изменение является разовым предложением. Используйте один из других ответов, если вы хотите всегда сохранять файл настроек, отличный от файла, который отправляется на сервер.

0 голосов
/ 13 августа 2011

Есть 3 сценария, в которых вам нужны разные настройки дБ:

  1. Различные разработчики, использующие одну и ту же ветку
  2. Различные env, использующие одну и ту же ветку (т. Е. QA, постановка или производство)
  3. Один и тот же разработчик, использующий разные ветви для попадания в разные среды.

Я бы взглянул на: 1. Наличие отдельной конфигурации только для строки подключения, если это возможно 2. Использование сценариев smudge / clean для преобразования файла настроек, который будет работать в этой среде 3. Управляйте слиянием, используя атрибуты git для явного сбоя при любых изменениях конфигурации. Один из способов сделать это - указать git рассматривать файл конфигурации как двоичный файл.

Прочитайте о git attributes и git smudge/clean scripts.

0 голосов
/ 12 августа 2011

при слиянии новых функций не следует удалять из файла. если вы хотите вернуть старые настройки БД, проверьте версию файла до слияния (HEAD^ сразу после слияния) и измените свой последний коммит. если ваши новые функции были добавлены в ветку, вы должны вручную изменить настройки БД.

, чтобы избежать подобных проблем в будущем, создайте файл шаблона (settings.template), который отслеживается git и содержит пустые настройки. поместите ваш файл реальных настроек в .gitignore и скопируйте шаблон в настоящее имя, затем отредактируйте его.

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