Git: как вы сливаетесь с удаленным репо? - PullRequest
0 голосов
/ 31 марта 2010

Пожалуйста, помогите мне понять, как работает git.

Я клонирую свой удаленный репозиторий на двух разных машинах.

Я редактирую один и тот же файл на обеих машинах.

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

! [rejected]        master -> master (non-fast-forward)

Я понимаю, почему я получил ошибку. Как я могу объединить свои изменения в удаленном репо? Нужно ли сначала извлекать удаленное репо?

Ответы [ 2 ]

5 голосов
/ 31 марта 2010

Да, после того, как удаленный репозиторий отклонил push как non-forward-forward, вам нужно извлечь из удаленного репозитория (это может привести к слиянию, что означает, что вам может потребоваться разрешить конфликт слияния - не забудьте зафиксировать конфликт слияния разрешение в этом случае), а затем нажмите еще раз.


  1. После внесения изменений на машинах A и B возникает следующая ситуация:

    • '' удаленный репозиторий ''

      *---*---*---C
      
    • '' машина A ''

      *---*---*---C---A
      
    • '' машина B ''

      *---*---*---C---B
      
  2. После отправки с машины A в удаленный репозиторий у вас есть:

    • '' удаленное хранилище ''

      *---*---*---C---A
      
    • '' машина A ''

      *---*---*---C---A
      
    • '' машина B ''

      *---*---*---C---B
      
      Выталкивание с машины B правильно откажется от «перезаписи» коммита A коммитом B.
  3. После извлечения из удаленного хранилища на машине B у вас есть:

    • '' удаленное хранилище ''

      *---*---*---C
      
    • '' машина A ''

      *---*---*---C---A
      
    • '' машина B ''

      *---*---*---C---B----M
                  \       /
                   \--A--/
      
      На случай, если это ASCII-искусство будет искажено: есть форма из коммита C, и две ветви объединяются в коммит M.

    Теперь нажатие будет ускоренным.

  4. После отправки с машины B в удаленный репозиторий

    • '' удаленное хранилище ''

      *---*---*---C---B----M
                  \       /
                   \--A--/
      
    • '' машина A ''

      *---*---*---C---A
      
    • '' машина B ''

      *---*---*---C---B----M
                  \       /
                   \--A--/
      
  5. Теперь на машине A вам нужно вытащить из хранилища перед началом любой новой работы, чтобы быть в курсе. Pull переместится вперед, что означает, что не будет создано никакого нового коммита слияния. Теперь все три машины имеют одинаковое состояние хранилища

    • '' Удаленное хранилище ''
      '' машина A ''
      '' машина B ''
      *---*---*---C---B----M
                  \       /
                   \--A--/
      

НТН

2 голосов
/ 31 марта 2010

Да.

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

git-push имеет несколько хороших иллюстраций.

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