Было бы чрезвычайно информативно попытаться создать некоторые диаграммы, объясняющие, что именно вы сделали, поэтому давайте сделаем это. Предположим, что вы, создав ветку функций из удаленного мастера, имели только 3 коммита. Это будет означать, что два местных отделения будут начать выглядеть как следующее:
A <- B <- C master
A <- B <- C feature
Давайте также предположим, что в течение последней недели, вы сделали несколько коммитов в вашу местную особенности отрасли, а также другие разработчик ваша команда также совершает фиксацию для удаленного мастера. После извлечения мастеров-ветви через master# git pull
, два ваши местные отделения будут выглядеть следующим образом:
A <- B <- C <- 1 <- 2 <- 3 master
A <- B <- C <- D <- E feature
Здесь коммиты 1, 2 и 3 пришли от других разработчиков, а совершает D и Е пришли от тебя.
Далее, если вы сделали местный Rebase мастера на функции через master# git rebase feature
, две ветви будут выглядеть следующим образом:
A <- B <- C <- D <- E <- 1' <- 2' <- 3' master
A <- B <- C <- D <- E feature
Мастер совершает 1, 2 и 3 имеют в настоящее время становятся 1 ', 2' и 3 ', потому что на самом деле это разные коммиты, сделанные после повторения функции на вашей основной ветке.
Наконец, давайте сравним местный мастер-ветвь с удаленным мастером:
A <- B <- C <- D <- E <- 1' <- 2' <- 3' local master
A <- B <- C <- 1 <- 2 <- 3 remote master
Когда вы сделали это git status
вызова, Git сказал вам, что ваш местный мастер расходился с пульта дистанционного управления. Это означает, что локальный и удаленный мастер совместно используют общий предок, но каждый из них имеет разные значения за пределами этой точки. Это также означает, что вы не можете ускорить перемотку удаленного ведущего устройства. Вашими опциями в этот момент являются принудительное нажатие через git push -f
или до git merge
. Как указал Оливер Шарлеорт, принудительная локальная ветка на удаленной машине обычно является плохим, потому что она может переписывать все изменения от других разработчиков, используя master. Остальная опция - объединить локальный мастер с пультом дистанционного управления.
Простой (и более чистый) способ продолжения движения вперед - это просто выполнить всю вашу работу в ветви функции, а затем объединить ее в мастер, когда придет время. Как правило, вы должны только переустанавливать функцию (или объединять функцию в) мастера, а не наоборот.
Нет, никогда не делайте 'git push -f', если вам не нравится раздражать остальных членов вашей команды! –
@OliverCharlesworth я сбрасываю жестко в orgin/master HEAD, а затем i git merge feature. то это сработало. не знаю, правильно ли это было – user3214546