Стратегия Git, чтобы продолжать применять мои изменения в чужой ветке обновлений - PullRequest
1 голос
/ 16 февраля 2012

У меня есть очень распространенный сценарий:

  • Я клонирую ветку development проекта с открытым исходным кодом.
  • Затем я создаюветвь с именем mychanges , где я добавляю некоторый код в проект.

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

Как этого можно достичь?

Я сделал следующий тест:

  • Создан файл notes.txt на master
  • Разветвлен на mychanges и извлечен
  • Добавлена ​​строка
  • Объединенов master
  • Удалена строка в версии на master
  • Теперь у master есть версия без добавленной строки, ветка mychanges имеет его, но если я попытаюсь объединить mychanges с master , снова git скажет: «Уже в курсе»te '.

Также сообщается о конфликте при объединении ветви development с mychanges one

Спасибо!

Ответы [ 2 ]

2 голосов
/ 16 февраля 2012

Теперь у мастера есть версия без добавленной строки, с веткой mychanges она есть, но если я попытаюсь снова объединить mychanges с мастером, git выдаст сообщение «Уже обновлено».

Это потому, что ветвь mychanges отстает от вашей master ветви.То есть master содержит все изменения, произошедшие в mychanges.

Также сообщает о конфликте, если я объединяю ветку разработки с mychanges one

Наличие конфликта при объединении двух разных веток - это нормально;это просто означает, что две ветви имеют разные, противоречивые изменения в них, и что слияние не может быть автоматически завершено.Я предполагаю, что вы отредактировали файл, находящийся в ветке development, и что git не может сработать, если вы хотите сохранить изменения из ветки development или mychanges.

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

Когда git не может автоматически объединить (то есть не может определить, какие изменения в файле сохранить, а какие удалить при объединении), вы можете выбрать изменения самостоятельно, а затем повторно объединить ветви,Это позволяет вам выбрать, какие изменения вы хотите;если вы хотите, чтобы изменения были из ветки development, вы можете сохранить их.Однако, если вы изменили те же строки кода , которые были изменены на development, вы можете оставить их вместо этого.

Вы должны прочитать книгу прогитов , в частности главу три , которая научит вас веткам и, в главе 3-6, rebasing ваши изменения сверхуиз новых изменений от development.

Книга Progit является отличным источником информации об использовании git и, вероятно, ответит на некоторые ваши вопросы.

0 голосов
/ 16 февраля 2012

Как только вы слили это, ну, вы слили это.

Если вы сделаете коммиты после слияния (на мастере), попытка слияния снова скажет, что она уже обновлена. В этом смысл слияния.

Если вы хотите вернуться к предыдущему состоянию после слияния, вы можете сделать git reset --hard ORIG_HEAD. Теперь, если вы попытаетесь объединиться снова, это произойдет снова.

Как только вы сделаете слияние, изменение будет в ветке, и вам не нужно будет «обновлять» его. Но если вы измените ветвь, с которой вы слились, таким образом, что вы удалите материал из вашего слияния, вы не сможете ожидать слияния снова и вернуть его обратно.

Вы можете продолжать перебазировать mychanges с помощью master, чтобы mychanges всегда основывался на HEAD of master, а затем, когда это необходимо, объединять его с master.

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