GIT повторно объединяет файлы из dev в master - PullRequest
3 голосов
/ 21 декабря 2010

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

Как я могу это сделать? Thx.

Ответы [ 3 ]

6 голосов
/ 21 декабря 2010

Если проблема в том, что ваши извлеченные файлы не совпадают с веткой, просто используйте git reset обычно:

git reset --hard HEAD

Это должно быть все, что тебе нужно. Однако, если вы все еще хотите перезаписать master с помощью dev, читайте дальше.


Если вы хотите перезаписать вашу основную ветку содержимым вашей ветви dev, используйте git reset, например, так:

$ git checkout master
$ git reset --hard dev

И затем, если вы хотите подтолкнуть это куда-нибудь еще:

$ git push origin master

Обратите внимание, что если ваша ветка разработчика не переходит вперед из вашей основной ветки (что, я думаю, не будет, поскольку вы сказали, что в вашей основной ветке есть какие-то испорченные вещи), вам понадобится чтобы добавить флаг --force в push-файл, чтобы перезаписать его на пульте дистанционного управления:

$ git push origin master --force

Обратите внимание, однако, что это может включать все обычные предостережения переписывания истории а-ля git rebase - если кто-то еще использует этот пульт, им придется иметь дело с эквивалентом перебазирования вверх по течению.


Чтобы избежать этой проблемы в будущем, посоветуйте своему другу, что использование --force почти никогда необходимо. Если у них возникают конфликты, когда они пытаются git push, они должны сначала git pull, разрешить конфликты, а затем git push.

1 голос
/ 21 декабря 2010

Из ваших комментариев кажется, что есть три возможных случая:

  1. Главный индекс содержит правильный код, а рабочая копия повреждена.
  2. Рабочая копия в порядке и индекстеперь сломан.
  3. Оба сломаны.

Во-первых, все обратно.Затем:

В случае 1 используйте git reset --hard HEAD, чтобы выбросить испорченную рабочую копию.

В случае 2 добавьте и зафиксируйте все в рабочей копии.

InВ случае 3 используйте git reset --hard dev, чтобы выбросить как индекс, так и рабочую копию.В качестве альтернативы, git reset --hard SOME_COMMIT_ID_THAT_ISN'T_BROKEN

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

Кроме того, вероятно, лучше не настаивать нане обнаженное хранилище (то есть одно с рабочей копией).Я бы посоветовал вам создать где-нибудь пустой репозиторий, из которого вы одновременно извлекаете и извлекаете данные, а не вставляете их прямо в репозиторий с рабочей копией.Используйте git init --bare для создания голого репо.

Я упоминал все обратно?Хорошо.Сделай это.

0 голосов
/ 21 декабря 2010

Хороший вопрос.Я хотел сделать это до себя, и я никогда не делал.Моим лучшим предположением может быть попытка ниже. ПРИМЕЧАНИЕ Я не уверен, насколько хорошо это будет работать для вас, поскольку я сам этого не сделал.

git checkout master

git pull origin dev

git commit -a -m "reverted to dev"

Выполнение вышеуказанного способа, скорее всего, вызовет конфликты.

...