git rebase не может «раздавить» без предыдущего коммита - PullRequest
0 голосов
/ 25 мая 2018

Раньше я все время использовал git rebase -i, но вдруг он перестал работать.

git rebase не работает ни в одном из моих проектов, что странно, и я подозреваю, что с моим git что-то не такконфигурация (?)

Я создал test репозиторий, чтобы показать, что я делаю.

В тестовом репозитории у меня есть 2 коммита

$ git log

commit 8fb921a9a481ef1040ee670af7894bff6055a5b4 (HEAD -> master, origin/master)
Author: Bu Kinoshita
Date:   Fri May 25 11:26:05 2018 -0300

test 2

commit 00ffa75caccf0118b9e89bc2bb70c4a7417b223a
Author: Bu Kinoshita
Date:   Fri May 25 11:25:39 2018 -0300

test

А затем git rebased с хешем коммита от первого коммита

git rebase -i 00ffa75caccf0118b9e89bc2bb70c4a7417b223a

pick 8fb921a test 2

# Rebase 00ffa75..8fb921a onto 00ffa75 (1 command)
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
# d, drop = remove commit
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out

Измените первую строку на squash 8fb921a test 2 и сохраните файл.

Появляется ошибка

error: cannot 'squash' without a previous commit
You can fix this with 'git rebase --edit-todo' and then run 'git rebase --continue'.
Or you can abort the rebase with 'git rebase --abort'.

Ответы [ 2 ]

0 голосов
/ 09 мая 2019

ты просто давишь в неправильном направлении.сквош вверх, а не вниз ... так что если у вас было:

Pick ####
Pick ###
Pick ###

, то сквош в один коммит таким образом:

Pick ###
Squash ###
Squash ###

таким образом, что коммит был раньше.вы можете использовать переиздание вместо выбора, если вам нужно переименовать коммит.но после сохранения появится экран, на котором вы можете отредактировать сообщение о коммите, которое увидит PR-обзор

0 голосов
/ 25 мая 2018

В тестовом репозитории у меня есть 2 коммита

Чтобы раздавить второй коммит в первый с помощью git rebase, вы должны перебазировать оба коммитов.

Так как есть только два, git rebase -i один не будет работать.Использование git rebase -i --root будет.

Однако, поскольку являются только двумя коммитами, а коммит, который вы хотите раздавить, является текущим коммитом, вы можете сделать этобез использования git rebase:

git reset --soft HEAD~1
git commit --amend

Недостаток здесь в том, что --amend будет представлять только сообщение первого коммита для редактирования;сообщение второго коммита исчезнет в этот момент.Обратите внимание, что --amend на самом деле не изменяет существующего коммита;вместо этого он создает новый коммит, чьи родители являются родителями текущего коммита.В этом случае текущий коммит является корневым коммитом, поэтому он использует отсутствие родительского коммита для создания нового корневого коммита.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...