Відповідь @Mureinik є доброю, але не зрозумілою для новачків.
Перший метод:
- Якщо ви хочете лише редагувати останнє повідомлення про фіксацію, тоді вам потрібно лише
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
#
- Як бачите, виконайте повідомлення зверху без будь-якого префікса команди, наприклад
pick
, це вже сторінка редагування, і ви можете направити редагування верхнього повідомлення та зберегти та вийти , наприклад:
<your new correction commit message>
# Please enter the commit message for your changes. Lines starting
....
- Тоді зробіть
git push -u origin master --force
або <how you push normally> --force
. Ключовим тут є --force
.
Другий метод:
Ви можете бачити хеш фіксації за git log
або витягнути з URL-адреси сховища, наприклад, у моєму випадку є881129d771219cfa29e6f6c2205851a2994a8835
Тоді ви можете зробити git rebase --interactive 881129d771219cfa29e6f6c2205851a2994a8835
або git rebase -i HEAD^
(якщо останні)
Ви б побачили:
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
- Але якщо ви бачите, що
noop
ви, мабуть, неправильно набираєте текст, наприклад, якщо ви робите те, git rebase -i 881129d771219cfa29e6f6c2205851a2994a88
що пропущено ^
в кінці, краще вийти з редактора без збереження і з'ясувати причину:
noop
# Rebase 8db7e8b..fa20af3 onto 8db7e8b
...
- Якщо
noop
проблеми не виникають, просто замініть слово pick
на reword
, інше просто залишається (ви не редагуєте повідомлення про фіксацію в цей момент), наприклад:
reword <commit hash> <your current commit message>
# Rebase 8db7e8b..fa20af3 onto 8db7e8b
#
# Commands:
# p, pick = use commit
...
- Зберегти та вийти, з’явиться сторінка редагування, схожа на метод №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 та збережіть та закрийте, наприклад:
<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
.
Для отримання додаткової інформації читайте документ .