Я хочу змінити повідомлення про фіксацію глибше в історії, і я підштовхнув багато нових комітетів.
Як змінити повідомлення про фіксацію? Це можливо?
Я хочу змінити повідомлення про фіксацію глибше в історії, і я підштовхнув багато нових комітетів.
Як змінити повідомлення про фіксацію? Це можливо?
Відповіді:
Повідомлення від Лінуса Торвальдса може відповісти на ваше запитання:
Змінення / редагування старих повідомлень про фіксацію
Коротка відповідь: не можна (якщо натиснуто).
екстракт (Лінус відноситься до BitKeeper як BK):
Бічна записка, просто з історичного інтересу: в БК ви могли.
І якщо ви звикли до цього (як я), це було справді досить практично. Я застосував би патч-бомбу від Ендрю, помітив, що щось не так, і просто відредагувати її, перш ніж виштовхувати її.
Я міг би зробити те ж саме з git. Було б досить просто зробити так, щоб повідомлення про фіксацію не було частиною імені, і все ж гарантувало, що історію не торкнулося, і дозволити річ "виправити коментарі пізніше".
Але я цього не зробив.
Частина його суто "внутрішньої консистенції". Git - це просто чистіша система завдяки всім захищеним SHA1, а всі об'єкти обробляються однаково, незалежно від типу об'єкта. Так, є чотири різні види об'єктів, і всі вони дійсно різні, і їх не можна використовувати однаково, але в той же час, навіть якщо їх кодування може бути різним на диску, концептуально вони всі працюють точно так само.
Але внутрішня узгодженість насправді не є приводом для негнучкості, і, очевидно, було б дуже гнучко, якби ми могли просто виправити помилки після того, як вони трапляються. Тож це не дуже сильний аргумент.
Реальна причина мерзотник не дозволяє змінювати фіксації кінців повідомлення до будучи дуже просто: таким чином, ви можете довіряти повідомленням. Якщо ви дозволили людям після цього їх змінити, повідомлення за своєю суттю не є надто надійними.
Щоб завершити, ви можете переписати свою локальну історію фіксації, щоб відобразити те, що ви хочете, як це запропонував sykora (з деяким перезавантаженням та скиданням - твердо, ах!)
Однак, як тільки ви опублікувати переглянуту історію знову (з git push origin +master:master
, то +
знак змушуючи поштовх статися, навіть якщо це не призводить до «швидкого вперед» зробити) ... ви могли б потрапити в халепу .
Витяг з цього іншого питання SO:
Я насправді одного разу підштовхнув до --force до сховища git.git і мене знущав Лінус ВЕЛИКИЙ ЧАС. Це створить масу проблем для інших людей. Проста відповідь - «не роби цього».
В даний час заміна git може зробити свою справу.
Детально: Створити відділення для тимчасової роботи
git checkout -b temp
Скиньте зобов’язання для заміни
git reset --hard <sha1>
Змініть комісію правильним повідомленням
git commit --amend -m "<right message>"
Замініть старий комікс на новий
git replace <old commit sha1> <new commit sha1>
поверніться до гілки, де ви були
git checkout <branch>
видалити гілку темп
git branch -D temp
поштовх
guess
зроблено.
Ви можете використовувати git rebase -i
(проти гілки, від якої ви розгалужені) 'я' для інтерактивної роботи.
Замініть pick
наступне на коментар, який ви хочете змінити, r
(або reword
), збережіть та вийдіть, і, зробивши це, ви зможете внести зміни.
git push
ще раз і все закінчено!
-p
аргумент, rebase
який p
резерв зливається.
Припустимо, у вас є таке дерево:
dd2e86 - 946992 - 9143a9 - a6fd86 - 5a6057 [master]
По-перше, checkout
тимчасова гілка:
git checkout -b temp
На temp
філії, reset --hard
до комісії, яку ви хочете змінити у своєму повідомленні (наприклад, що це виконувати 946992
):
git reset --hard 946992
Використовуйте amend
для зміни повідомлення:
git commit --amend -m "<new_message>"
Після цього дерево буде виглядати так:
dd2e86 - 946992 - 9143a9 - a6fd86 - 5a6057 [master]
\
b886a0 [temp]
Потім, cherry-pick
все роблять , що попереду 946992
від master
до temp
і зафіксувати їх, використовувати , amend
якщо ви хочете змінити свої повідомлення , а також:
git cherry-pick 9143a9
git commit --amend -m "<new_message>
...
git cherry-pick 5a6057
git commit --amend -m "<new_message>
Дерево зараз виглядає так:
dd2e86 - 946992 - 9143a9 - a6fd86 - 5a6057 [master]
\
b886a0 - 41ab2c - 6c2a3s - 7c88c9 [temp]
Тепер примушуйте натиснути гілку темпу на віддалений:
git push --force origin temp:master
Заключний крок, видаліть гілку master
на локальному, git fetch origin
щоб витягнути гілку master
з сервера, а потім перейти до гілки master
та видалити гілку temp
.
Тепер всі ваші місцеві та віддалені буде оновлено всі повідомлення.
У нашому магазині я представив умову додавання впізнаваних анотованих тегів до комісій з неправильними повідомленнями та використання анотації як заміни.
Незважаючи на те, що це не допомагає людям, які виконують випадкові команди "git log", це дає нам спосіб виправити неправильні посилання прослідників помилок у коментарях, і всі мої інструменти побудови та випуску розуміють умову.
Це, очевидно, не є загальною відповіддю, але це може бути щось, що люди можуть прийняти в конкретних громадах. Я впевнений, що якщо це використовувати в більш широких масштабах, якась порцелянова підтримка може зрізатися, врешті-решт ...
(З http://git.or.cz/gitwiki/GitTips#head-9f87cd21bcdf081a61c29985604ff4be35a5e6c0 )
Як змінити чиниться глибше в історії
Оскільки історія в Git незмінна, виправлення будь-чого, крім самого останнього комітету (фіксація, яка не є головним відділенням), вимагає, щоб історія була переписана зі зміненого комітету та вперед.
Ви можете використовувати StGIT для цього, при необхідності ініціалізувати гілку, не підключившись до комісії, яку потрібно змінити, перейдіть до неї, якщо потрібно, внесіть зміни, потім оновіть патч (з опцією -e, якщо ви хочете виправити повідомлення про фіксацію), а потім натисніть все і stg здійснюють.
Або ви можете використовувати для цього rebase. Створіть нову тимчасову гілку, перемотайте її на команду, яку ви хочете змінити, використовуючи скидання git - тверда, змініть цю команду (це було б верхньою частиною поточної головки), потім перезавантажте гілку поверх зміненої фіксації, використовуючи git rebase --onto.
Або ви можете використовувати git rebase --interactive, який дозволяє різні модифікації, такі як переупорядкування патчів, згортання, ...
Я думаю, це повинно відповісти на ваше запитання. Однак зауважте, що якщо ви пересунули код до віддаленого сховища, і люди вийшли з нього, то це зіпсує їх історію коду, а також роботу, яку вони виконали. Тому робіть це обережно.
Якщо ви використовуєте розширення Git: перейдіть на екран "Коміт", у нижній частині має бути прапорець "Змінити комісію", як видно нижче: