2012-05-24 7 views
2

Я работаю над небольшим проектом с одним другим разработчиком, и у нас немного ситуация. Мы оба знакомы с SVN, но Git является новым для нас обоих.Плохое слияние разрешения конфликтов в Git. Повторить неудачную фиксацию, сохраняя изменения с тех пор?

Мы работаем над единой веткой в ​​нашем хранилище, каждый из которых работает над различными аспектами нашего проекта.

Что случилось, он что-то совершил, затем я что-то совершил, имел конфликты (в файлах дизайнеров, поскольку он пытался поместить оба наших новых файла в одно и то же «пятно»), и, как я их разрешил, что-то пропустил, но теперь он не работает. Мне удалось каким-то образом загрузить файлы в рабочее состояние и продолжил свой веселье, добавив больше вещей, на которые не повлияло плохое разрешение конфликтов.

Так выглядит.

A (Хорошо) -> B (Плохо) -> C (Попытка исправить) -> D (Revert Bad commit) -> A -> E (Полностью новые файлы) -> F (Полностью новые файлы) -> > G (Другие дебаты сначала совершают с большой проблемой, вносят больше проблем и конфликтов.)

Что я хочу сделать в основном, вернусь к A. и слияние в моих B, E и F совершает, в какой точке другой разработчик может совершить G. На данный момент я не знаю, что произошло между B и E, поэтому я предпочел бы просто разорвать его, поскольку именно я пытался решить проблему. Однако, когда я возвращаюсь к A, я не получаю подсказку о тех же конфликтах, которые я сделал, когда я изначально совершил B.

Пожалуйста, помогите мне.

+0

Что вы подразумеваете под «когда я возвращаюсь к А»? Вы делаете 'git reset A'? – ellotheth

ответ

4

Попробуйте проверить свою фиксацию с помощью ссылки SHA, создайте новую ветку из A и вишни B, E и F, используя команду вишневого захвата в git.

git checkout -f A23FDE (A) 
git checkout -b new-branch-name 
git cherry-pick F45HJ2 (B) 
git cherry-pick E49FG2 (E) 
git cherry-pick K83D87 (F) 
+0

Это работало FANTASTICALLY! Некоторое время приходилось из-за ошибок слияния, с которыми мы сталкивались, но это определенно вернуло нас туда, где мы хотели работать с рабочим проектом. Мой единственный вопрос: теперь, когда мы объединили ветку «CherryPick» в ветку «master», как мы можем направить это на источник/хозяин и начальство/HEAD без Git, жалующихся? Где мы с мастером именно там, где мы хотим, чтобы эти два были ... Сбросить? Rebase? Мы пробовали читать, но сброс - это только commit -amend? Это все так запутывает ха-ха. Спасибо за помощь! –

+1

Если вы объединили CherryPick в мастер и вы довольны состоянием мастера, тогда вы должны просто иметь возможность «git push origin master». Если мастер впереди или сзади, вам сначала нужно «git pull origin master» и разрешить локальные конфликты перед нажатием. Если вы хотите, чтобы ваша локальная ведущая ветвь была перезаписана, тогда просто используйте флаг силы на вашем нажатии на главный источник. Хотя я бы не рекомендовал это, так как вы никогда не должны принудительно обновлять удаленные репозитории. –