2014-05-09 16:48:06 +0000 2014-05-09 16:48:06 +0000
135
135

Есть ли способ отредактировать сообщение о коммите на GitHub?

Есть ли способ отредактировать сообщение о коммите после фиксации и нажатия на GitHub? Я вижу, что есть “добавить заметку”, а также встроенный комментарий, но на самом деле никакого редактирования сообщения о коммите нет. В расширениях git'а также есть “исправление коммита”, но это не редактирует существующее сообщение.

Ответы (5)

189
189
189
2014-05-10 10:27:44 +0000
  1. git rebase -i <commit hash you want to change>^

  2. Для любого коммита, который вы хотите изменить сообщение, измените pick на reword.

  3. Сохранить и выйти (в vi: :wq).

  4. Для каждого такого коммита вы получите редактор для редактирования сообщения о коммите. Измените его по своему усмотрению, сохраните и выйдите из него.

  5. Теперь вы можете загрузить их в github, используя git push origin --force.

Если вам просто нужно исправить последний коммит, вы можете заменить шаги 1-4 на git commit --amend.

35
35
35
2018-06-18 09:49:45 +0000

В Intellij Idea вы можете сделать это так легко.

  1. Управление открытой версией (история)
  2. Выберите закладку журнала
  3. Выберите фиксацию, чтобы изменить комментарий
  4. нажмите F2 (Mac fn + F2) и обновите сообщение о фиксации.
3
3
3
2019-03-14 07:29:36 +0000

Точно: 0x2 и

если ваш git-график выглядит как …

O target-commit that you want to change its message [df9c192]
|
O parent-commit [b7ec061]
|
O

(df9c192 и b7ec061 - это хэши коммитов целевой и скобки, отдельно)

Решение:

вы можете просто набрать следующие инструкции….

git reset --soft b7ec061
git commit -m "your_new_description"
git push -f

Объяснение:

  1. git reset --soft b7ec061 сохранит ваши изменения файлов и сбросит их в родительский коммит (т.е. b7ec061)
  2. git commit -m "..." локально создаст новый коммит
  3. git push -f протолкнет ваш новый коммит на сервер и заменит старый (т.е. df9c192).
2
2
2
2018-08-08 22:27:59 +0000

Другой вариант - создать дополнительный “коммит ошибок” (и push), который ссылается на объект коммита, содержащий ошибку - новый коммит ошибок также предоставляет исправление. Фиксация ошибок - это фиксация без существенных изменений кода, но с важным сообщением о фиксации – например, добавить один символ пробела в ваш файл readme и зафиксировать изменения важным сообщением о фиксации, или использовать git-вариант --allow-empty. Конечно, это проще и безопаснее, чем перебазинг, он не изменяет правдивую историю, а также поддерживает чистоту дерева ветвей (использование amend также является хорошим выбором, если вы исправляете самый последний коммит, но коммит на ошибки может быть хорошим выбором для более старых коммитов). Такого рода вещи так редко случаются, что просто документировать ошибку достаточно хорошо. В будущем, если вам понадобится искать в git-журнале ключевое слово функции, оригинальный (ошибочный) коммит может не появиться, потому что в оригинальном коммите (оригинальная опечатка) было использовано неверное ключевое слово - однако, ключевое слово появится в коммите по ошибкам, который укажет вам на оригинальный коммит, в котором была опечатка. Вот пример:

$ git log commit 0c28141c68adae276840f17ccd4766542c33cf1d Author: First Last Date: Wed Aug 8 15:55:52 2018 -0600 Errata commit: This commit has no substantive code change. THis commit is provided only to document a correction to a previous commit message. This pertains to commit object e083a7abd8deb5776cb304fa13731a4182a24be1 Original incorrect commit message: Changed background color to red Correction (\*change highlighted\*): Changed background color to \*blue\* commit 032d0ff0601bff79bdef3c6f0a02ebfa061c4ad4 Author: First Last Date: Wed Aug 8 15:43:16 2018 -0600 Some interim commit message commit e083a7abd8deb5776cb304fa13731a4182a24be1 Author: First Last Date: Wed Aug 8 13:31:32 2018 -0600 Changed background color to red
0
0
0
2019-08-24 11:01:51 +0000

Ответ @Mureinik хорош, но непонятен новичку.

Первый метод:

  1. Если вы хотите редактировать только последнее сообщение о коммите, то вам понадобится только git commit --amend, как вы увидите:
<your existing commit mesage foo bar> 

# Please enter the commit message fir your changes. Lines starting
# with # will be ignored, and an empty message aborts the commit.
#
# Date: Sat Aug 24 17:56:16 2019 +0800
#
# On branch is up to date with 'origin/master'.
#
# changes to be committed:
# modified: foo.py
#
  1. Как вы видите, фиксация сообщения сверху без префикса команды, например pick, это уже страница редактирования, и вы можете направить редактировать верхнее сообщение и сохранить и убрать, например:
<your new correction commit message> 

# Please enter the commit message for your changes. Lines starting
....
  1. Затем выполните git push -u origin master --force или <how you push normally> --force. Ключ здесь - --force.

Секундный метод:

  1. Вы можете увидеть хэш коммита по git log или извлечь из url репозитория, например, в моём случае это 881129d771219cfa29e6f6c2205851a2994a8835

  2. Затем вы можете сделать git rebase --interactive 881129d771219cfa29e6f6c2205851a2994a8835 или git rebase -i HEAD^ (если последний)

  3. Вы увидите:

pick <commit hash> <your current commit message>

# Rebase 8db7e8b..fa20af3 onto 8db7e8b
#
# 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
  1. Но если вы видите noop, то вы, вероятно, печатаете неправильно, например, если вы делаете git rebase -i 881129d771219cfa29e6f6c2205851a2994a88, в конце которого отсутствует ^, вам лучше выйти из редактора без сохранения и выяснить причину:
noop

# Rebase 8db7e8b..fa20af3 onto 8db7e8b
...
  1. Если noop проблемы нет, то просто измените слово pick на reword , остальное просто останется (на данный момент вы не редактируете сообщение о фиксации), e. g:
reword <commit hash> <your current commit message>

# Rebase 8db7e8b..fa20af3 onto 8db7e8b
#
# Commands:
# p, pick = use commit
...
  1. Save&quit увидит страницу редактирования аналогично методу #1:
<your existing commit mesage foo bar> 

# Please enter the commit message fir your changes. Lines starting
# with # will be ignored, and an empty message aborts the commit.
#
# Date: Sat Aug 24 17:56:16 2019 +0800
#
# interactive rebase in progress; onto b057371
# Last command done (1 command done):
# reword d996ffb <existing commit message foo bar>
# No commands remaining.
# You are currently editing a commit while rebasing branch 'master' on 'b057371'.
#
# changes to be committed:
# modified: foo.py
#
  1. Редактируйте сообщение сверху, так же как и метод #1 и сохраняйте&quit, например:
<your new correction commit message> 

# Please enter the commit message for your changes. Lines starting
....
  1. Опять же, так же как и метод #1, делайте git push -u origin master --force или <how you push normally> --force. Ключ здесь - --force.

Для получения дополнительной информации, пожалуйста, прочтите док .

Похожие вопросы

19
4
12
9
3