Изменить сообщение коммита в SourceTree Windows (уже отправлено на удаленный компьютер)

203

Как мне отредактировать неверное сообщение коммита в SourceTree, не касаясь командной строки?

Дополнительные детали:

  • Это не последний коммит.
  • Все уже было передано в Bitbucket.
  • Это частный репозиторий, и я единственный сотрудник.
  • Я не возражаю против потери любого из предыдущих коммитов, так как я могу повторно зафиксировать их в любое время.
  • Я не хочу, однако, терять какие-либо изменения кода, когда-либо сделанные.

Результат:

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

Ответы:

427

Вот шаги для редактирования сообщения коммита предыдущего коммита ( который не является самым последним коммитом ) с использованием SourceTree для Windows версии 1.5.2.0 :

Шаг 1

Выберите коммит непосредственно перед коммитом, который вы хотите отредактировать. Например, если я хочу отредактировать коммит с сообщением "FOOBAR!" тогда мне нужно выбрать коммит, который идет прямо перед ним:

Выбор коммита перед тем, который я хочу редактировать.

Шаг 2

Щелкните правой кнопкой мыши на выбранном коммите и нажмите Rebase children...interactively:

Выбор «Перебазировать детей в интерактивном режиме».

Шаг 3

Выберите коммит, который вы хотите редактировать, затем нажмите Edit Messageвнизу. В этом случае я выбираю коммит с сообщением «FOOBAR!»:

Выберите коммит, который вы хотите редактировать.

Шаг 4

Отредактируйте сообщение о коммите и нажмите OK. В моем примере я добавил "SHAZBOT! SKADOOSH!"

Изменить сообщение коммита

Шаг 5

Когда вы вернетесь в интерактивное окно перебазирования, нажмите, OKчтобы завершить перебазирование:

Нажмите OK, чтобы закончить.

Шаг 6

На этом этапе вам необходимо принудительно нажать новые изменения, поскольку вы отменили коммиты, которые вы уже выдвинули. Однако текущая версия SourceTree для Windows 1.5.2.0 не позволяет принудительно проталкивать GUI, поэтому вам все равно придется использовать Git из командной строки, чтобы сделать это.

Нажмите Terminalв графическом интерфейсе, чтобы открыть терминал.

Нажмите Терминал

Шаг 7

Из терминала принудительно нажмите следующую команду:

git push origin <branch> -f

где <branch>имя ветви, которую вы хотите нажать, и -fозначает принудительное нажатие. Принудительное нажатие перезапишет ваши коммиты на вашем удаленном репо, но это нормально в вашем случае, так как вы сказали, что не делитесь своим репо с другими людьми.

Это оно! Вы сделали!


источник
4
Шаги в основном одинаковы и для версии для Mac.
race_carr
3
Осторожно: если вы хотите начать свое коммит-сообщение с #, это не сработает, git рассматривает его как комментарий и сообщает, что ваше коммит-сообщение пустое!
Даниэль Эдхольм Игнат
1
«Вот и все! Ты молодец!» - это так просто, как я не знаю, что, как добыча кролика. Вместо создания программной функции, для такой важной и часто встречающейся ситуации. Когда вы только что сделали опечатку в спешке, вы должны сбросить голову и создать новый коммит снова.
Рантиев
67
Забавно - мне интересно, почему они не делают простой вариант «Редактировать сообщение».
Джонатан Акино,
1
Force Push теперь доступен через графический интерфейс. В противном случае
ИДЕАЛЬНО
43

На версии 1.9.6.1. Для UnPressed commit.

  1. Нажмите на ранее совершенное описание
  2. Нажмите значок «Фиксация»
  3. Введите новое сообщение о коммите и выберите « Изменить последний коммит » в раскрывающемся списке параметров фиксации .
  4. Передайте ваше сообщение.
Франк
источник
13

Если сообщение с комментарием содержит неанглийские символы, используя метод, предоставленный user456814, эти символы будут заменены знаками вопроса. (протестировано под исходным деревом Ver2.5.5.0)

Поэтому я должен использовать следующий метод.

ВНИМАНИЕ : если фиксация была получена другими участниками, изменения, приведенные ниже, могут стать причиной хаоса для них.

Шаг 1 : В главном окне исходного дерева перейдите на вкладку репо и нажмите кнопку « терминал », чтобы открыть командную консоль git.

Шаг 2 :

[Ситуация A] : целевой коммит - самый последний.

1) В командной консоли git введите

git commit --amend -m "new comment message"

2) Если целевой коммит был перенесен на удаленный, вы должны снова нажать принудительно. В командной консоли git введите

git push --force

[Ситуация B] : целевой коммит не самый последний.

1) В командной консоли git введите

git rebase -i HEAD~n

Это раздавить последние русские коммиты. например, если вы хотите отредактировать сообщение до последнего, n равно 2. Эта команда откроет окно vi, первое слово каждой строки будет « pick », и вы измените «pick» на « reword » для строки Вы хотите редактировать. Затем введите, :wqчтобы сохранить и выйти из этого окна vi. Теперь откроется новое окно vi, в котором вы вводите новое сообщение. Также используйте, :wqчтобы сохранить & выйти.

2) Если целевой коммит был перенесен на удаленный, вы должны снова нажать принудительно. В командной консоли git введите

git push --force


Наконец : в главном окне исходного дерева нажмите, F5чтобы обновить.

Хоси Голден
источник
12

Обновить

Примечание: этот ответ изначально был написан в отношении более старых версий SourceTree для Windows, и в настоящее время устарел.

Смотрите мой новый ответ для текущей версии SourceTree для Windows, 1.5.2.0 . Я оставляю этот ответ в исторических целях.

Оригинальный ответ

поскольку я в Windows, у меня нет инструмента командной строки, и я не знаю, как его использовать :( Это единственный способ разобраться? GUI не охватывает все функции git? - Оригинальный плакат

Что касается графических интерфейсов Git, нет, они не охватывают все функции Git . Они даже близко не подходят . Я предлагаю вам проверить один из ответов в разделе Как отредактировать неверное сообщение о коммите в Git? Git достаточно гибок, что есть несколько решений ... из командной строки.

На самом деле SourceTree может поставляться с оболочкой msysgit bash или может использовать стандартную командную оболочку Windows. В любом случае, вы открываете его из SourceTree, нажимая кнопку «Терминал»:

введите описание изображения здесь

Вы устанавливаете, какой терминал SourceTree использует (bash или Windows) здесь:

введите описание изображения здесь

Один из способов решения проблемы в SourceTree

При этом, вот один способ, которым вы можете сделать это в SourceTree. Так как вы упомянули в комментариях, что вы не возражаете против «возврата к ошибочному коммиту» (под которым я предполагаю, что вы на самом деле имеете в виду сброс, что является другой операцией в Git), то вот шаги:

  1. Сделайте полный сброс в SourceTree до плохого коммита, щелкнув по нему правой кнопкой мыши и выбрав Reset current branch to this commit, и выбрав опцию полного сброса из выпадающего списка.введите описание изображения здесь
  2. Нажмите кнопку «Выполнить», затем
  3. Нажмите на флажок внизу с надписью «Изменить последний коммит». введите описание изображения здесь
  4. Внесите необходимые изменения в сообщение, затем снова нажмите «Применить». Вуаля!

Что касается этого комментария :

если это невозможно, потому что оно уже отправлено в Bitbucket, я не против создать новый репозиторий и начать все сначала.

Значит ли это, что вы единственный человек, работающий в репо? Это важно, потому что нетрудно изменить историю репо (например, путем внесения изменений в коммит), не создавая проблем для ваших соавторов. Тем не менее, если предположить, что вы являетесь единственным человеком, работающим с репо, то следующее, что вы хотели бы сделать, это принудительно перенести вашу измененную историю на удаленный сервер.

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

git push remote-repo head -f

Это также предполагает, что BitBucket позволит вам принудительно сделать толчок к репо.

В любом случае вы должны действительно научиться использовать Git из командной строки, это сделает вас более опытным в Git. #ProTip, используйте msysgit и включите режим быстрого редактирования в свойствах терминала, чтобы вы могли дважды щелкнуть, чтобы выделить строку текста, щелкнуть правой кнопкой мыши, чтобы скопировать, и снова щелкнуть правой кнопкой мыши, чтобы вставить. Это довольно быстро.

Сообщество
источник