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

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

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

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

Результат:

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

4 ответа

Решение

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

Шаг 1

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

Я хочу редактировать

Шаг 2

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

Выбор

Шаг 3

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

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

Шаг 4

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

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

Шаг 5

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

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

Шаг 6

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

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

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

Шаг 7

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

git push origin <branch> -f

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

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

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

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

Если сообщение с комментарием содержит неанглийские символы, используя метод, предоставленный 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 обновить.

Обновить

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

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

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

поскольку я в Windows, у меня нет инструмента командной строки, и я не знаю, как его использовать:(Это единственный способ разобраться? Графический интерфейс не охватывает все функции 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 и включите режим быстрого редактирования в свойствах терминала, чтобы вы могли дважды щелкнуть, чтобы выделить строку текста, щелкнуть правой кнопкой мыши, чтобы скопировать, и снова щелкнуть правой кнопкой мыши, чтобы вставить. Это довольно быстро.

Другие вопросы по тегам