Перебазировать, но игнорировать один вышестоящий коммит? - PullRequest
0 голосов
/ 30 марта 2011

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

Там, где я пришел в git-land, у меня был SVN-репозиторий, над которым работали я и еще один разработчик. Наш премьер-министр изменил график проекта так, что его подпроект должен быть запущен практически сразу, а мой - примерно через месяц. Мы оба разрабатываем в одном репозитории SVN, и мои материалы уже становятся видимыми для пользователя, и поэтому их необходимо резервировать для предстоящей производственной миграции.

Я обновил свой рабочий каталог SVN. Я инициировал git-репозиторий в том же каталоге (игнорируя .svn и т. Д.). Я сделал git branch map-dev, чтобы создать ветку разработки для моего (связанного с картой) подпроекта. Я сделал git checkout master, чтобы вернуться в ветку с синхронизацией SVN, и отредактировал эти файлы, чтобы забрать мою работу. Как только ранние части моего проекта перестали быть видимыми, я взял на себя обязательство git (с комментарием «материал для поиска по карте сделан невидимым»), зафиксировал SVN и подтолкнул содержимое SVN к подготовке. Так что теперь в том, что происходит на промежуточном / тестовом сервере, нет ничего моего и всего его, и это нормально.

Через несколько дней я развился в своей ветке map-dev, и мой коллега зарегистрировал кое-что в SVN, которое ДЕЙСТВИТЕЛЬНО не влияет на то, что я делаю, но я бы хотел остаться в синхронизировать с.

I git checkout master. Я svn up. Я git commit -a с комментарием "обновление из SVN".

Теперь я думаю, хорошо, перебазируйте map-dev с этими изменениями в мастере, верно? Так что я делаю это, я разрешаю конфликт или два, и все кажется неуклюжим. Затем я замечаю, что изменения, которые я зафиксировал в master, которые называются «материал для поиска по карте, сделанный невидимым», являются актуальными. В моей ветке разработчика не было более поздних коммитов, просто так было, когда репо был впервые зафиксирован.

Итак. Я использовал git revert --hard ORIG_HEAD, чтобы вернуться туда, где я был до ребазинга. Что я хочу, так это изменения CSV, которые я только что добавил в master, но НЕ коммит, сделавший мою работу невидимой. Как мне это сделать?

1 Ответ

1 голос
/ 30 марта 2011

Я бы предложил объединить его код в вашу ветку разработчика:

git checkout map_dev
git merge master

Затем верните ваш коммит, который удалил ваш код:

git revert <sha1>

Где находится SHA1 коммита, который удалил ваш код из master. Теперь у вас будет его код в вашей ветке map_dev, за вычетом очистки. Когда вы туда доберетесь, это упростит слияние вашего кода обратно в master.

Редактировать: В качестве альтернативы может быть проще (что приведет к более чистому слиянию), если вы сделаете что-то более похожее на это:

git checkout master -b temp
git revert <sha1 of code removal>
git checkout map_dev
git merge temp
git branch -d temp

Это вернет удаление кода вверху вашей ветви, что может вызвать меньше конфликтов слияния. Я не могу сказать наверняка.

...