34
  git commit --amend --allow-empty

затем

  git push origin master

мерзавец сказал, что

! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'remoteurl'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again.  See the
'Note about fast-forwards' section of 'git push --help' for details.

Зачем? Как это исправить?

4 ответа4

56

Проблема не в том, что вы нажимаете пустой коммит.
Речь идет о передаче другого коммита (с другим SHA1), чем тот, который уже выдвинут.
Вот что делает git commit --amend : он изменил последний коммит, он не создал новый.

Это означает, что вы выдвигаете историю, отличную от той, которую уже могли клонировать другие.
Если вы уверены, что это не будет проблемой, вам нужно принудительно нажать:

git push -f origin master

Если бы вы сделали:

git commit --allow-empty

Вы бы создали новый (пустой) коммит, который вы могли бы нажать без проблем.

4

Если вы хотите создать пул-запрос на Github. Вы можете:

git commit --allow-empty -m "make pull request"

Затем создайте запрос без изменений.

2

Чтобы уточнить принятый ответ, так как у меня недостаточно репутации, чтобы комментировать:

Когда вы используете

git commit --amend

оно создает новое обязательство. Однако он не добавляет его к текущему коммиту, он добавляет его к родителю текущего коммита. Визуально это будет выглядеть как вилка.

  O (old commit)
 /
O-O (amended commit)

Git интерпретирует это как отклонение от удаленного. Вот почему он не позволит вам толкать его без принуждения.

0

Убедитесь, что удаленная ветвь, на которую вы пытаетесь перейти, в настоящий момент не извлечена. Я однажды создал git-репозиторий на одном из моих серверов и не мог понять, почему я не смог на нем заполучить. После дня или около того устранения неполадок, я обнаружил, что не могу нажать на хранилище (или ветку, которую я хотел), пока он был извлечен в хранилище сервера. Итак, я просто создал новую ветку, которую я извлекаю, когда я закончу вносить изменения на сервере, и затем я могу перейти на сервер. Возможно, это не ваша проблема, но я получал ошибку, похожую на эту, когда у меня возникла проблема с отправкой пустого файла на моем сервере.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .