Как я могу изменить сообщение git моего 1 push in github? - PullRequest
3 голосов
/ 08 марта 2012

Мое окружение:

Я работаю с командой над частным репозиторием github.

У нас есть только основная ветвь.

Воспроизвестипроблема:

  1. Я внес изменения (я говорю об одиночном, а не muilticase) и добавил + commit + push в частный репозиторий github.

  2. Я увидел сообщение в github после моего нажатия - и у меня есть ошибка, которую я хочу изменить.

  3. Как я могу изменить сообщение моего нажатия?

Редактировать: Для меня важно, что от моего ошибочного сообщения не останется никакой истории.

Edit2: Файлы, уже загруженные, являютсяв репозитории github и не только в моем локальном репозитории

Ответы [ 2 ]

7 голосов
/ 08 марта 2012

TL; DR

git commit -v --amend
git push -f

Это позволит вам отредактировать последнее сообщение о коммите и заменить коммит на пульте вашими правками.

ОДНАКО

Скорее всего, вам лучше просто внести исправление.

Единственный способ изменить существующий коммит:

git add changed # example, add changed to the commit
git commit -v --amend # launch editor, edit commit message

Это позволит вам легко редактировать ваш последний коммит (либо содержимое, либо сообщение о коммите)

Затем вы обнаружите, что не можете нажать на пульт, когда вы попытаетесь, он будет отклонен с таким предупреждением:

 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'git@github.com:xxx/xxx.git'
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.

Что дает вам два варианта:

  1. Сначала потяните, прежде чем снова нажать
  2. Force-push (git push -f)

Если вы сначала потянете - вы поместите неотредактированный коммит обратно в свою историю, он все еще будет существовать, но у вас не будет проблем с отправкой в ​​удаленную ветку. Оригинальный коммит будет отображаться в истории как слияние.

Если вы нажмете принудительно, вы буквально заставите удаленную ветвь принять вашу локальную историю и перезаписать историю удаленной ветки.

Примечание из собственной справки git, возможно, лучше всего использовать для описания того, почему форсирование пуша вообще плохая идея:

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

В контексте «потерянные коммиты» будут старой версией коммита, который вы отредактировали, но могут также включать изменения, которые коллега помещает между вашим первым и принудительным толчком. По этой причине это рискованный маневр.

Если вам это нужно, это может быть сделано - но либо действуйте быстро (чтобы никто не скачивал borked-commit), либо знайте, что у любого другого разработчика возникнут проблемы, связанные с переходом в эту ветку.

3 голосов
/ 08 марта 2012

Если еще никто не получил коммит с ошибочным сообщением, вы можете сбросить указатель HEAD в состояние до того, как вы сделали коммит:

git reset --soft HEAD^

Это отменит ваш последний коммит и поместитфайлы в этом коммите как поэтапные, и вы можете зафиксировать снова с новым сообщением.Обратите внимание, что вы должны нажать --force, поскольку вы на самом деле перезаписываете историю на сервере:

git commit -m 'new and correct message goes here'
git push --force origin master
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...