Подтвердить что ты не робот

Git push: нажмите все фиксации, кроме последнего

Есть ли способ отправить все мои локальные коммиты в удаленный репозиторий, кроме самого последнего? Я бы хотел оставить последний на месте на случай, если мне понадобится внести поправку.

4b9b3361

Ответ 1

Попробуйте это (если вы работаете с ветвью master, а ваш пульт называется origin):

git push origin HEAD^:master

HEAD^ указывает на фиксацию до последнего в текущей ветке (последняя фиксация может быть отнесена как HEAD), поэтому эта команда нажимает эту фиксацию (со всеми предыдущими фиксациями) на удаленную ветвь origin/master.

В случае, если вас это интересует, вы можете найти дополнительную информацию об указании изменений в этой странице руководства.

Обновление: Я сомневаюсь в этом, но в любом случае вы должны быть осторожны с этой командой, если ваш последний коммит является слиянием. С фиксацией слияния в HEAD HEAD^ относится к первому родителю этого коммита, HEAD^2 - ко второму родительскому элементу и т.д.

Ответ 2

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

git push <remote> <commit hash>:<branch>

Например, если у вас есть эти коммиты:
111111 & lt; - первый коммит
222222
333333
444444
555555
666666 & lt; - последний коммит

git push origin 555555:master

..Получит все, кроме вашего последнего коммита, в удаленную ветку master, и

git push origin 333333:myOtherBranch  

..Будет принудительной фиксацией до 333333 включительно в вашу удаленную ветку myOtherBranch

Ответ 3

Другая возможность -

git reset --soft HEAD^

чтобы раскрыть ваш последний фиксатор и переместить изменения в поэтапный. Тогда вы можете

git push

и он будет только толкать оставшиеся фиксации. Таким образом, вы можете увидеть, что будет нажато (через git log).