Когда вы пересобираете ветку, вы должны переписать фиксации для любого фиксации, которая выше коммитов в ветке, на которую вы перегружаете. Это связано с тем, что одним из свойств фиксации является его родитель (или родители). Когда вы переустанавливаете, вы меняете родителя самого старого локального коммита в своей ветке - и, таким образом, изменяете хэши фиксации всех ваших локальных коммитов, так как это изменение пузырится через транзакции транзитивно.
Поскольку вы уже подтолкнули ветку, вы должны были объединиться в ветви источника, а не сбрасывать ее. Можно «форсировать» новую ветвь (используя флаг -f
), но нормальный толчок не будет работать, потому что целостность истории ветвей будет нарушена. Если вы сотрудничаете с другими в этой отрасли, принудительное нажатие - плохая идея, так как это приведет к тому, что другие соавторы станут очень смущены, когда их история внезапно не будет соответствовать.
TL; DR - Если вы не сотрудничаете, нажмите на ветку, используя push -f. Если вы хотите, сбросьте ветвь в предыдущее состояние и замените ее в ветви источника.
«Поскольку вы уже подтолкнули ветку, вы должны были объединиться в ветви источника» - почему? – hammett
@HamiltonVerissimo Первое предложение Джейсона: «Когда вы пересобираете ветку, вы должны переписать фиксации для любого фиксации, которая выше коммитов в ветке, на которую вы перегружаете.«Даже несмотря на то, что изменения, зафиксированные в« выше », совершают один и тот же логический контент, они применяются к другой базе и, следовательно, разные коммиты с разными хэшами. Если другие разработчики работают из предварительно переустановленной ветки, то делают git push -f будет крайне разрушительным для их рабочего процесса.Таким образом, поскольку эта ветвь была нажата на общедоступный источник, он должен был объединиться. – awolf
вы также можете использовать push -force-with-lease, если вы не уверены, что кто-то другой уже толкает что-то. – Console