Перебазируем локальную ветку и толкаем ее на github - PullRequest
3 голосов
/ 02 октября 2019

На Github у меня есть:

  • основная ветвь, скажем github_master_branch
  • и личная (удаленная) ветвь, скажем так github_personal_branch

    1. В прошлом я клонировал с github

    2. Я извлек github_personal_branch (используя Pycharm) и создал локальную ветку с тем же именем(но скажем, это local_personal_branch)

    3. От local_personal_branch Я нажимаю на github_personal_branch

Теперь, на github_personal_branch, у меня есть коммиты позади и перед github_master_branch.

Я хочу получить изменения от github_master_branch к моему local_personal_branch, исправить конфликты и затем нажать его дляgithub_personal_branch.

  1. Я пытался сделать ребаз, но вместо этого я получил много коммитов, все те, которые github_master_branch были впереди, вместо перемещения заголовка.

  2. Я также попробовал опцию rebase в Pycharm, множественные комбинации, но я не очень хорошо понимаю логику полей onto, from.

  3. Я попробовал второй ручной ребаз, но кроме мастера я получил оченьстарый код, который был доступен некоторое время назад на local_personal_branch.

Ответы [ 3 ]

3 голосов
/ 06 октября 2019

Чтобы перебазировать в Pycharm , вам необходимо убедиться, что вы первый на правой ветви:

  • оформить заказ local_personal_branch
  • получить для обновления origin
  • перейти на refs/remotes/origin/github_master_branch (на поле), как описано здесь

https://blog.jetbrains.com/ruby/files/2010/12/rebase.png

Для перебазирования все равно требуется принудительный толчок, кстати, это не очень хороший способ ни форсировать толчок, ни перебазировать.

Я бы сказал, что в данном случае это: «local_personal_branch» является личным (для вас): вы можете сделать это повторно и принудительно толкать его столько раз, сколько захотите, так какВы - единственный, кто работает над этим.

Идея перебазирования состоит в том, чтобы сделать будущий запрос на извлечение тривиальным ответом для принятия, потому что ваши local_personal_branch коммиты будут перебазированы поверх последних из origin/github_master_branch,это означает, что принятие такого PR приведет к простому слиянию в ускоренном режиме: нет конфликтов.

Плюс, как уже упоминалось здесь , объединение master в ветвь функции не рассматривается какЛучшая практика: вы (обычно) сливаетесь с master, а не с него.
См. " rebase vs. merge ".

2 голосов
/ 10 октября 2019

Хотя я довольно экспериментировал с ребазой CLI, я никогда не понимал, как использовать опцию ребазирования IntelliJ ^^

Из того, что я понимаю, у вас есть следующие настройки:

     github/master
          v
A-B-C---D-E
     \
      \-F-G
          ^
       personal,
    github/personal

У вас тоже должна быть ветка master (локальный мастер). Если вы не уверены в этой настройке, пожалуйста, предоставьте нам вывод следующей команды:

git log --oneline --decorate --graph local_personal_branch github_personal_branch master github_master_branch

Вам нужно переместить вашу личную ветку на master, чтобы получить следующий график:

       github/master
            v
A-B-C---D---E---F'---G'
                     ^
                  personal
               github/personal

Итак, команда:

git rebase --onto github/master C personal
git push --force

Чтобы объяснить это:

  • вы хотите, чтобы коммиты между коммитом C и personal были помещены натекущая ветка github/master.
  • вы отправляете новую личную ветку в github. Поскольку перебазирование не создает линейную историю (некоторые предыдущие персональные коммиты (F, G) теряются и заменяются новыми «идентичными» коммитами (F 'и G')), вам необходимо принудительно нажать толчок.

Для справки, ваш удаленный репозиторий, вероятно, называется origin, а не github (см. Вывод git remote -v), поэтому вам следует заменить ссылку на github на origin в предыдущем коммите. Буква C должна быть заменена номером хэша последнего общего коммита между master и personal.

Kind.

0 голосов
/ 10 октября 2019

Вместо перебазировки используйте слияние, как указано ниже:

  1. Слияние современной (удаленной) github_master_branch с вашей local_personal_branch. (Под удаленным я имею в виду состояние этой ветви на удаленном компьютере; вы можете сначала обновить локальный мастер и объединить его, но убедитесь, что вы используете последнюю версию)

  2. Исправьте любые конфликты между мастером и вашей веткой (на локальном local_personal_branch)

  3. Нажмите local_personal_branch на github_personal_branch.

Теперьdiff между personal_branch и master должно быть только изменениями, внесенными в personal_branch. Это облегчит объединение его с мастером позже.

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