Почему я не могу нажать пустой коммит?

35
  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.

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


источник

Ответы:

56

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

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

git push -f origin master

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

git commit --allow-empty

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

VonC
источник
5

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

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

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

1Rhino
источник
3

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

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

git commit --amend

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

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

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

Dustin
источник
0

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

PRaven
источник