Чому git спонукає мене до повідомлення про завершення злиття після потягу?


142

Нещодавно, після будь-якого git pull, git почав нереститися в моєму текстовому редакторі та просити повідомлення про злиття. Повідомлення про фіксацію вже попередньо заповнене, і мені просто потрібно зберегти і закрити вікно, щоб завершити функцію.

У минулому це зробило б об'єднання мовчки, зі стандартним повідомленням про фіксацію (уздовж рядків Merge branch 'dev' of remote.com:/repo into dev).

Нещодавно я оновив git до версії 1.7.11.3 (через homebrew), але не можу придумати нічого іншого, що я міг би зробити, щоб змінити цю поведінку. Це налаштування, чи існує інший спосіб повернутися до такого, яким він був?

Відповіді:


157

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

Ви можете використовувати --no-editпрапор, щоб уникнути такої поведінки, але, ну, не варто. Об'єднання, як і будь-які зобов'язання в історії, повинні бути добре побудовані. Ваша історія не повинна бути корисною.


54
Дякую за допомогу. Я не погоджуюся, що об'єднання об'єктів завжди повинні бути описовими. Причина, за якою я переглянув це, полягає в тому, що автоматичні злиття щоразу, коли я тягну, просять мене пояснити, чому злиття необхідне, що швидко стає необґрунтованим, оскільки це робиться навіть тоді, коли я не маю змін.
Брайан

10
Це також корисний ресурс для уникнення такої поведінки: longair.net/blog/2009/04/16/git-fetch-and-merge Вам слід уникати git pull; використовувати, git merge --ff-onlyякщо ви просто намагаєтесь оновити, і ви не думаєте, що у вас є якісь локальні зміни; використовуйте, git merge --no-ffякщо ви насправді намагаєтесь об'єднати відділення.
Гліф

6
Чи є прапор конфігурації, щоб вимкнути це? Прикро набирати - не редагувати кожного разу.
LandonSchropp

Дивовижно. Дякуємо, що поділилися @Christopher.
LandonSchropp

3
@SeanCoetzee: Це залежить від вашого $EDITORналаштування, але якщо ви використовуєте git поза коробкою на OSX, це, ймовірно, програма під назвою 'vi' . Введіть iдля переходу в режим "ВСТАВКА"; введіть своє повідомлення. Потім можна зберегти та вийти, натиснувши ESCта ввівши :wq.
Крістофер

58

Щоб створити ярлик для подальшого використання, виконайте такі дії:

Відредагуйте своє ~/.gitconfigза допомогою наступного:

[core]
    mergeoptions = --no-edit

Або виконати наступне в Терміналі

git config --global core.mergeoptions --no-edit


13
Це не спрацювало для мене (git на OSX), і я правильно його встановив, дивлячись на вихід git config --global core.mergeoptions.
jvannistelrooy

Команда терміналу повинна бути такою, як нижчеgit config core.mergeoptions --no-edit
С. Мерт

@SimsekMert, який буде редагувати лише .gitconfig у поточному сховищі, а не в усьому світі для кожного сховища git
Даллас Кларк,

@AbhishekGoel є ймовірність, що вам може знадобитися перезапустити Термінал, щоб зміни вплинули
Даллас Кларк,

@jvannistelrooy, можливо, вам знадобиться перезапустити Terminal, щоб зміни вплинули
Даллас Кларк,

11

Спочатку прислухайтеся до попереджень у відповіді Крістофера вище.

Потім, якщо ви все ще хочете відключити автоматичне редагування повідомлень про об'єднання, встановіть цю змінну середовища:

    GIT_MERGE_AUTOEDIT=no

Ця змінна середовище та її параметр "ні" задокументовані на сторінці документа git merge . Рекомендується використовувати його лише в сценаріях, які потребують об'єднання неінтерактивно, але, звичайно, його можна встановити як частину вашого середовища оболонки, щоб зробити його ефекти більш постійними.


Чи можете ви пояснити, як це може відрізнятися від використання --no-editпрапора?
Олександр Міллс

2
Я не знаю про функціональну різницю, але фактор зручності робить це вартим. --no-editПрапор повинен бути повторений в командному рядку з кожним використанням, так як він не з'являється на роботу в настройках , як описано у відповідь Даллас Кларк тут. Налаштування змінної середовища є єдиним способом, який я знаю, щоб зробити це налаштування палицею.
emackey
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.