Есть ли способ отправить все мои локальные коммиты в удаленный репозиторий, кроме самого последнего? Я бы хотел оставить последний на месте на случай, если мне понадобится внести поправку.
Git push: нажмите все фиксации, кроме последнего
Ответ 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
).