Как получить последние данные из репозитория git и применить мои изменения, упорядоченные по ветке - PullRequest
0 голосов
/ 20 мая 2018

Немного предыстории:

  1. Я разветвлялся из вышестоящего репозитория.
  2. Оформить заказ на разработку ветки с этого форка пару недель назад
  3. Произвел некоторые изменения и проверилin (Пока не выдвигал)
  4. Между тем были выдвинуты некоторые другие изменения в ветке upstream.

Текущая ситуация.

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

Что делатьЯ хочу сделать?

  1. Я хочу получить точную копию исходного кода / разработки на мою текущую (я не хочу создавать другую ветку) ветку разработки ипримените к нему только мое последнее изменение и отправьте его.

  2. Примените мою старую двухнедельную работу поверх этого изменения в той же ветке.Это я расскажу пару дней спустя.

Может кто-нибудь помочь мне с командами git и объяснить, что происходит на заднем плане?

То, что я пытался.git reset --hard Это говорит мне, что моя голова отсоединена.

git rebase -i upstream / branch.Я думаю, что это применит все мои изменения, но я хочу только последнее изменение, которое я сделал.

1 Ответ

0 голосов
/ 20 мая 2018

Мне кажется, что график коммитов, соответствующий вашей ситуации, выглядит следующим образом:

        A--B--C--X [develop]
       /
o--o--o  <-- develop from couple of weeks ago
       \
        O--O [upstream/develop]

A--B--C - это ваша двухнедельная работа, а X - ваша последняя новая функция.

Теперь вы делаете следующее:

1.Отметьте конец двухнедельной работы

$ git branch twoweeks C

Вам необходимо выяснить хеш коммита C и использовать его в команде, или, в качестве альтернативы, использовать графический обозреватель хранилища для создания ветви для этого коммита.

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

Результат:

                X [develop]
               /
        A--B--C [twoweeks]
       /
o--o--o--O--O [upstream/develop]

2.Переместите новую функцию на

$ git rebase --onto upstream/develop twoweeks develop

Результат:

        A--B--C [twoweeks]
       /
o--o--o--O--O [upstream/develop]
             \
              X [develop]

3.Переместите две недели работы на

$ git rebase develop twoweeks

Результат:

o--o--o--O--O [upstream/develop]
             \
              X [develop]
               \
                A--B--C [twoweeks]

4.Очистка

  1. Нажмите новую функцию

    $ git checkout develop
    $ git push
    

    Результат:

    o--o--o--O--O--X [upstream/develop] [develop]
                    \
                     A--B--C [twoweeks]
    
  2. Быстрая перемотка вперед в локальной ветви разработкии удалите временную ветку

    $ git checkout develop
    $ git merge --ff-only twoweeks
    

    (используя --ff-only в качестве проверки работоспособности, если она не удалась, вы сделали что-то не так)

    $ git branch -d twoweeks
    

    Результат:

    o--o--o--O--O--X [upstream/develop]
                    \
                     A--B--C [develop]
    

Ссылки

...