Як зробити без змін та нове повідомлення?


137

Як я можу створити нове commitта створити нове повідомлення, якщо у файлах не внесено змін?

Це неможливо, оскільки код комітету (SHA?) Буде однаковим?

Відповіді:


168

Рідко є вагомі причини для цього, але параметр - --allow-emptyпорожні коміти (файли не змінені), на відміну від --allow-empty-messageпорожніх повідомлень про фіксацію. Ви також можете прочитати більше, ввівши git help commitабо відвідавши онлайн-документацію .

У той час як деревооб'єкт (у якого є власний хеш) буде ідентичним, комісія насправді матиме інший хеш, оскільки він, ймовірно, матиме іншу часову позначку та повідомлення, і неодмінно матиме інший батьківський прихильність. Всі три з цих факторів інтегровані в gitалгоритм хешування об'єктів.


Там є кілька причин , ви можете зробити порожній ( з урахуванням деяких зауважень):

  • Як "декларативні зобов'язання", додати розповідь або документацію (через DavidNeiss ), включаючи фактичні факти про проходження тестів або вказівки (через Роберта Баліцького ).
  • Для тестових gitкоманд без генерування довільних змін (через Vaelus ).
  • Для відновлення видаленого голого сховища за допомогою gitolite(через Tatsh ).
  • Довільно створити нову команду, наприклад, для повторного запуску інструментів збирання (через mattLummus ) або для особистого журналу чи показників (через DynamiteReed ). Однак подумайте двічі: залежно від вашої структури гілки / злиття, комісії можуть існувати дуже довго, тому стратегія "просто нічого не робити" може ненавмисно забруднити сховище вашої команди тимчасовими артефактами робочого процесу та ускладнити відокремлення змін коду від ефемерна крихта.

Інші стратегії додавання метаданих до дерева комісій включають:

  • Окремі гілки або полегшені теги, які завжди вказують на фіксацію певного статусу (наприклад, "остання прийнята комісія" або "поточна послідовна фіксація").
  • Позначені теги для способу запису часової позначки, фіксатора та повідомлення, вказуючи на існуючий фільтр без додавання запису в самому дереві комісій.
  • git notes пов’язати змінну ноту поверх існуючого непорушного коміту.

2
Я почав слідувати моделі гілки потоку git . Коли ви робите devформу гілки , masterа потім featвідділення відразу від dev, то featгалузь виглядає виходити від masterгалузі , як є ніяких відмінностей не вчинять на devгілки якої featгілка виходить. Порожня фіксація, коли ви вперше зробите devфілію, допомагає встановити devгілку як власну безстроково стійку гілку незалежно від master. Як правило, це корисно, коли ви використовуєте гілки як шари та створюєте два шари з одного комітету
Novice C

2
Ще одна причина: Якщо ви пропустите щось важливе з повідомлення про фіксацію перед натисканням, ви не можете цього зробити, commit --amendякщо пульт не дозволяє силовий натискання. Таким чином, ви можете дозволити розробникам побачити важливе повідомлення, яке відповідає попередній комісії.
Andy J

1
Я хочу це зробити, тому що я натиснув зобов’язання, але забув щось згадати у повідомленні про виконання. Наші повідомлення про фіксацію інтегруються з програмним забезпеченням для відстеження випусків та постійної інтеграції, а вміст повідомлення про фіксацію впливає на ці програми. Чи є кращий спосіб? Це здається найкращим рішенням у моєму випадку. Єдине, що я можу собі уявити, - це якимось чином вдатися до повернення попереднього зобов'язання.
sytech

1
Я просто використовував це, щоб запустити наш гачок, який попередньо здійснює, який скриптує базу даних. Тож відбулися зміни, просто git не міг їх побачити до запуску сценарію. Можна, звичайно, запустити його вручну, але тоді це було б запущено сценарій двічі.
yoyodyn

1
Дуже корисно при взаємодії з відстеженням проблем, вбудованим для git-серверів як github та gogs.
SimonF

37

Якщо я правильно тебе зрозумів, ти хочеш зробити порожнє зобов’язання. У цьому випадку вам потрібно:

git commit --allow-empty

35

Порожня фіксація повідомлення

git commit --allow-empty -m "Empty test commit"

Порожнє фіксування з порожнім повідомленням

git commit --allow-empty --allow-empty-message

3

Якщо ви використовуєте таку систему, як gitversion, це має багато сенсу робити такі види фіксацій . У вас може виникнути комісія, спеціально для нахилу основної версії за допомогою + semver: main comment.


3

Можливо, в якості більш розумної альтернативи ви можете створити примітку з примітками (названий коміт з повідомленням). Дивіться git tag -aваріант.

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