В моем хранилище есть ветка под названием, над aq
которой я работаю.
Затем я совершил новую работу и ошибки master
.
Каков наилучший способ получить эти коммиты в aq
ветке? Создать еще одну новую ветку master
и объединить ее с aq
?
В моем хранилище есть ветка под названием, над aq
которой я работаю.
Затем я совершил новую работу и ошибки master
.
Каков наилучший способ получить эти коммиты в aq
ветке? Создать еще одну новую ветку master
и объединить ее с aq
?
git pull origin my_branch_name
Ответы:
Проверьте
aq
ветку и сделайте ребаз изmaster
.источник
git merge
было бы лучше. Если обе ветви развивались с течением времени, вы должны подумать, что лучше для вас.Вы должны быть в состоянии только
git merge origin/master
когда вы находитесь на вашей ветке aq.источник
rebase
если ваша ветка является локальной и не была отправлена вorigin
. Используйте,merge
если ваша ветка уже нажата.rebase
перепишу историю.Сначала проверьте, чтобы освоить:
Сделайте все изменения, исправления и коммиты и нажмите ваш мастер.
Вернитесь к своей ветке 'aq' и объедините в ней master:
Ваша ветка будет в курсе с мастером. Хорошим и базовым примером слияния является 3.2 Git Branching - Basic Branching и Merging .
источник
Нет гарантии, что основные исправления ошибок не входят в число других коммитов, поэтому вы не можете просто объединить. Делать
Предполагая, что эти коммиты представляют исправления ошибок.
Отныне храните исправления ошибок в отдельной ветке. Вы сможете просто
когда вы хотите свернуть их все в обычную ветку разработки.
источник
Либо
cherry-pick
соответствующая фиксация в ветке,aq
либо слияние веткиmaster
с веткойaq
.источник
Слить это с
aq
источник
Простой способ
источник
Для меня у меня уже были изменения, и я хотел, чтобы последние из базовой ветви. Я был не в состоянии сделать
rebase
, иcherry-pick
взял бы навсегда, поэтому я сделал следующее:так что в этом случае:
источник
Это ( отсюда ) работает для меня:
Цитирование:
источник
У вас есть пара вариантов.
git rebase master aq
на ветку, в которой будут храниться имена коммитов, но НЕ ПЕРЕДАТЬ, если это удаленная ветка. Вы можете,git merge master aq
если вам не важно сохранять имена коммитов. Если вы хотите сохранить имена коммитов и это удаленная ветка,git cherry-pick <commit hash>
то коммиты в вашу ветку.источник
Вы также можете сделать это, запустив одну строку.
git merge aq master
Это эквивалентно
источник
git merge a b
объединяет ветвиa
иb
в текущую ветку. Ноgit merge a
когда вы находитесь на веткеa
, ничего не будете делать (вот почему это выглядит так, будто он делает то, что, как вы думаете, он делает). (См. Git-scm.com/docs/git-merge#Documentation/… .)РЕДАКТИРОВАТЬ:
Мой ответ ниже документов способ слияния
master
вaq
, где , если вы просмотреть детали слияния в нем перечислены изменения , внесенные вaq
до слияния, а не изменения , сделанные наmaster
. Я понял, что это, вероятно, не то, что вы хотите, даже если вы думаете, что это так!Просто:
Это хорошо.
Да, это простое слияние покажет, что изменения
master
были сделаныaq
в этот момент, а не наоборот; но это нормально - это то, что случилось! Позже, когда вы, наконец, объедините свою веткуmaster
, тогда объединение, наконец, покажет все ваши изменения в том виде, вmaster
каком они были внесены (это именно то, что вы хотите, и это коммит, где люди все равно ожидают найти эту информацию).Я проверил, и подход ниже также показывает те же самые изменения (все изменения, внесенные
aq
после первоначального разделения междуaq
иmaster
), что и обычный подход выше, когда вы наконец объединяете все обратноmaster
. Так что я думаю, что его единственным реальным недостатком (помимо того, что он слишком сложный и нестандартный ...: - /) является то, что если вы свернете n последних изменений с помощью,git reset --hard HEAD~<n>
и это пройдет после слияния, то нижеприведенная версия будет свернута вниз. «неправильная» ветвь, которую вы должны исправить вручную (например, с помощьюgit reflog
&git reset --hard [sha]
).[Итак, ранее я думал, что это:]
Есть проблема с:
потому что изменения, показанные в коммите слияния (например, если вы смотрите сейчас или позже в Github, Bitbucket или в вашем любимом локальном просмотрщике истории git), являются изменениями, внесенными в master, что вполне может быть не тем, что вам нужно.
С другой стороны
показывает изменения, сделанные в aq, что, вероятно , то, что вы хотите. (Или, по крайней мере, это часто то, что я хочу!) Но объединение, показывающее правильные изменения, находится на неправильной ветви!
Как справиться ?!
Полный процесс, заканчивающийся фиксацией слияния, показывающей изменения, внесенные в aq (согласно второму слиянию выше), но слиянием, влияющим на ветку aq, таков:
Это: объединяет aq с мастером, быстро переходит вперед на то же самое слияние с aq, отменяет его на master и снова возвращает вас на aq!
Я чувствую, что что-то упустил - кажется, это то, что вы, очевидно, хотели бы, и что-то, что трудно сделать.
Кроме того, ребаз не эквивалентен. Он теряет метки времени и идентичность коммитов, сделанных на aq, что тоже не то, что я хочу.
источник
Сценарий:
Решение
источник