Редагування повідомлення про фіксацію в SourceTree Windows (вже натиснуто на віддалений)


202

Як редагувати неправильне повідомлення про фіксацію у SourceTree, не торкаючись командного рядка?

Додаткові дані:

  • Це не останнє зобов’язання.
  • Все вже було підштовхнуто до Bitbucket.
  • Це приватне сховище, і я є єдиним співробітником.
  • Я не проти втратити будь-який з попередніх зобов’язань, тому що можу повторно їх виконувати в будь-який час.
  • Однак я не хочу втрачати будь-яку модифікацію коду, яку-небудь коли-небудь робив.

Результат:

  • Наразі, згідно з вашими коментарями та відповідями, це здається неможливим, я збираюся створити нове сховище та розпочати все спочатку. Дякую всім за допомогу!

Відповіді:


425

Ось кроки для редагування повідомлення про фіксацію попереднього комітету ( який не є останнім зобов’язанням ) за допомогою SourceTree для Windows версії 1.5.2.0 :

Крок 1

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

Вибір фіксації перед тим, який я хочу редагувати.

Крок 2

Клацніть правою кнопкою миші на вибраному фіксування та натисніть Rebase children...interactively:

Вибір "Інтерактивна база дітей".

Крок 3

Виберіть команду, яку потрібно відредагувати, а потім натисніть Edit Messageвнизу. У цьому випадку я вибираю команду із повідомленням "FOOBAR!":

Виберіть команду, яку потрібно відредагувати.

Крок 4

Відредагуйте повідомлення про фіксацію та натисніть кнопку OK. У своєму прикладі я додав "SHAZBOT! SKADOOSH!"

Відредагуйте повідомлення про фіксацію

Крок 5

Повернувшись до вікна інтерактивної бази даних, натисніть на, OKщоб закінчити оновлення:

Клацніть OK, щоб закінчити.

Крок 6

На цьому етапі вам потрібно буде примусити змінити свої нові зміни, оскільки ви перезавантажили зобов’язання, які ви вже натиснули. Однак поточна версія 1.5.2.0 SourceTree для Windows не дозволяє примусово просунути GUI, тому для цього вам потрібно буде використовувати Git з командного рядка.

Клацніть Terminalвід GUI, щоб відкрити термінал.

Натисніть Термінал

Крок 7

З термінального натискання натисніть за допомогою наступної команди,

git push origin <branch> -f

де <branch>назва гілки, яку ви хочете натиснути, і -fозначає примусити натиснути. Силовий поштовх замінить ваші зобов’язання на віддаленому репо-репортажі, але це нормально у вашому випадку, оскільки ви сказали, що не ділитесь репо-рентом з іншими людьми.

Це воно! Ви закінчили!


4
Етапи в основному однакові і для версії Mac.
race_carr

2
Остерігайтеся: Якщо ви хочете почати повідомлення про фіксацію з #, це не спрацює, git трактує це як коментар і повідомляє вам, що повідомлення про фіксацію порожнє!
Даніель Едгольм Ігнат

1
"Це все! Ви зробили!" - Це так просто, як я не знаю, що може бути кроликом. Замість того, щоб створити функцію програми, для такої важливої ​​та часто спостерігається ситуації. Коли ви тільки що зробили помилку на друк, вам доведеться скинути голову та створити нову команду знову.
Рантьєв

67
Смішно - мені цікаво, чому вони не роблять просту опцію "Редагувати повідомлення про завершення".
Джонатан Аквіно

1
Сила Push тепер доступна через GUI. В іншому випадку
досконало

43

У версії 1.9.6.1. Для UnPushed.

  1. Клацніть на раніше зроблений опис
  2. Клацніть піктограму "Здійснити"
  3. Введіть нове повідомлення про фіксацію та виберіть " Зміна останнього зобов'язання " зі спадного меню Параметри введення.
  4. Введіть своє повідомлення.

13

Якщо повідомлення коментаря включає символи, які не є англійськими , використовуючи метод, передбачений user456814, ці символи будуть замінені знаками запитання. (випробувано у sourcetree Ver2.5.5.0)

Тому я повинен використовувати наступний метод.

ПОПЕРЕДЖЕННЯ : якщо комісію зняли інші члени, зміни нижче можуть спричинити хаос для них.

Крок 1. У головному вікні sourcetree знайдіть вкладку repo та натисніть кнопку « термінал », щоб відкрити консоль команди 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, перше слово кожного рядка - " вибирати ", а ви змінюєте "вибір" на " перетворення " для рядка ви хочете редагувати Потім введіть, :wqщоб зберегти та вийти з цього вікна. Тепер відкриється нове вікно vi, у цьому вікні ви вводите нове повідомлення. Також використовуйте :wqдля збереження та виходу.

2) Якщо цільова комісія була натиснута на віддалений, вам доведеться натиснути знову силою. В командній консолі git введіть

git push --force


Нарешті : У головному вікні вихідного дерева натисніть, F5щоб оновити.


12

Оновлення

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

Дивіться мою нову відповідь на поточну версію SourceTree для Windows, 1.5.2.0 . Цю відповідь я залишаю позаду в історичних цілях.

Оригінальний відповідь

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

Що стосується графічних інтерфейсів Git , вони не охоплюють усіх функцій Git . Вони навіть не підходять близько . Я пропоную вам перевірити один із відповідей у ​​розділі Як редагувати неправильне повідомлення про фіксацію в Git? , Git досить гнучка, що існує декілька рішень ... з командного рядка.

SourceTree може фактично поставлятися з оболонкою bash msysgit, або він може використовувати стандартну командну оболонку 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 і ввімкніть режим швидкого редагування у властивостях терміналу, щоб ви могли двічі клацнути, щоб виділити рядок тексту, клацніть правою кнопкою миші, щоб скопіювати, і правою кнопкою миші знову вставте. Це досить швидко.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.