что произойдет при слиянии, если в битбакете изменились и мастер, и ветка

У меня есть ветка от мастера на моей локальной машине. Я знаю, как merge что-то освоить в репозитории. но вопрос вот в чем.

Думаю, какой-то другой разработчик изменил главный репозиторий, отправив в него изменения, и в то же время я собираюсь объединить изменения в главный репозиторий из ветки.

Что будет в этой ситуации.

Что мне делать в такой ситуации. Я попытался сделать следующее из моей ветки.

  • добавил свои изменения с помощью -> git add *
  • затем фиксируется с помощью -> git commit -m "my commit"
  • затем нажмите на мою ветку с помощью -> git push -u origin my_branch_name
  • затем изменил репозиторий на master с помощью -> git checkout master
  • затем объединил ветку с мастером -> git merge my_branch_name

до этого этапа все было успешно. затем я попытался нажать следующую команду (несколько минут назад другой разработчик нажал на master)

  • git push origin master

затем он говорит следующее.

! [rejected]        master -> master (fetch first)
error: failed to push some refs to '[email protected]:abcdef/cups.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

на данном этапе что мне делать.

  1. должен ли я получить pull после объединенного шага, а затем нажать (на этом этапе, если я получу пулл, что произойдет.) или
  2. мне нужно сделать что-то вроде git stash, затем push и что-то в этом роде.

надеюсь на вашу помощь в этом. Большое спасибо.


person bill    schedule 25.12.2016    source источник


Ответы (2)


Вам нужно потянуть remote/master (чтобы получить все удаленные изменения), после чего вы сможете отправить свои локальные изменения.

  1. Скажем, когда вы вытащили remote/master, было 2 коммита (A, B)

    remote/master: A -> B
    local/master:  A -> B
    
  2. Затем другой разработчик отправил фиксацию P в мастер.

    remote/master: A -> B -> P
    local/master:  A -> B
    
  3. Затем вы совершили X в своей ветке (скажем, feature)

    remote/master: A -> B -> P
    local/master:  A -> B
    local/feature: A -> B -> X
    
  4. Теперь объединил ваш feature с local/master

    remote/master: A -> B -> P
    local/master:  A -> B -> X
    local/feature: A -> B -> X
    
  5. Теперь вам нужно вытащить remote/master, чтобы получить все коммиты удаленного/ведущего в локальный/главный.

    remote/master: A -> B -> P
    local/master:  A -> B -> P -> X    # now local/master has P (sync with remote/master)
    local/feature: A -> B -> X  
    
  6. Переместите свой локальный/мастер на удаленный

    remote/master: A -> B -> P -> X
    local/master:  A -> B -> P -> X
    local/feature: A -> B -> X
    
person Sajib Khan    schedule 26.12.2016

Вам нужно получить работу, которая была отправлена ​​​​другим человеком, и интегрировать ее локально, прежде чем вы сможете отправить ее. Вы можете либо выполнить «git pull» напрямую, либо, что еще лучше, выполнить «git fetch», за которым следует либо «git merge», либо «git rebase». Преимущество выборки заключается в том, что вы можете видеть, какая фиксация была отправлена ​​​​другим пользователем. Затем вы можете принять решение о слиянии или перебазировании. Преимущество перебазирования заключается в том, что в результате получается «более чистое» дерево.

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

person iclman    schedule 25.12.2016