Dlaczego git monituje mnie o komunikat zatwierdzenia scalania po ściągnięciu?

142

Niedawno, po jakimś czasie git pull, git zaczął tworzyć mój edytor tekstu i prosić o wiadomość o zatwierdzeniu scalenia. Komunikat dotyczący zatwierdzenia jest już wstępnie wypełniony, a ja muszę tylko zapisać i zamknąć okno, aby zakończyć ściąganie.

W przeszłości dokonywał scalania po cichu, ze standardowym komunikatem o zatwierdzeniu (zgodnie z liniami Merge branch 'dev' of remote.com:/repo into dev).

Niedawno zaktualizowałem git do wersji 1.7.11.3 (przez homebrew), ale nie przychodzi mi do głowy nic innego, co mógłbym zrobić, aby zmienić to zachowanie. Czy to jest ustawienie, czy jest inny sposób, aby wrócić do poprzedniego stanu?

shanebonham
źródło

Odpowiedzi:

157

W git 1.7.10 programiści git zdecydowali, że zatwierdzenia scalające mogą być zbyt łatwe. Jak wyjaśniono w tym poście na blogu, wymuszenie zachowania interaktywnego komunikatu o zatwierdzeniu powinno uczynić te komunikaty o zmianach bardziej szczegółowymi i może zmniejszyć ogólną częstotliwość niepotrzebnych scaleń.

Możesz użyć --no-editflagi, aby uniknąć tego zachowania, ale cóż, nie. Merge commity, podobnie jak inne zatwierdzenia historii, powinny być dobrze skonstruowane. Twoja historia powinna być pożyteczna.

Krzysztof
źródło
54
Dzięki za pomoc. Nie zgadzam się jednak z tym, że zatwierdzenia scalające powinny zawsze być opisowe. Powodem, dla którego to sprawdziłem, jest to, że automatyczne scalanie za każdym razem, gdy wyciągam, proszą mnie o wyjaśnienie, dlaczego scalanie jest konieczne, co szybko staje się nieracjonalne, ponieważ robi to nawet wtedy, gdy nie mam żadnych zmian.
Brian
10
Jest to również przydatne źródło informacji, aby uniknąć takiego zachowania: longair.net/blog/2009/04/16/git-fetch-and-merge Należy tego unikać git pull; użyj, git merge --ff-onlyjeśli próbujesz tylko zaktualizować i uważasz, że nie masz żadnych lokalnych zmian; użyj, git merge --no-ffjeśli faktycznie próbujesz scalić gałąź w.
Glyph
6
Czy jest flaga konfiguracji, aby to wyłączyć? Irytujące jest wpisywanie za każdym razem - no-edit.
LandonSchropp,
Niesamowite. Dzięki za udostępnienie @Christopher.
LandonSchropp
3
@SeanCoetzee: To zależy od twoich $EDITORustawień, ale jeśli używasz git po wyjęciu z pudełka na OSX, prawdopodobnie jest to program o nazwie 'vi' . Wpisz, iaby przejść do trybu „INSERT”; Wpisz swoją wiadomość. Następnie możesz zapisać i wyjść, naciskając, ESCa następnie wpisując :wq.
Christopher,
58

Aby utworzyć skrót do wykorzystania w przyszłości: -

Edytuj swoje, korzystając ~/.gitconfigz:

[core]
    mergeoptions = --no-edit

Lub wykonaj następujące czynności w Terminalu

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

Dallas Clark
źródło
13
To nie zadziałało dla mnie (git na OSX) i ustawiłem to poprawnie, patrząc na wyjście git config --global core.mergeoptions.
jvannistelrooy
polecenie terminalu powinno być takie jak poniżejgit config core.mergeoptions --no-edit
S. Mert
@SimsekMert, który będzie edytować plik .gitconfig tylko w bieżącym repozytorium, a nie globalnie dla każdego repozytorium git
Dallas Clark
@AbhishekGoel jest szansa, że ​​będziesz musiał ponownie uruchomić Terminal, aby zmiany zaczęły obowiązywać
Dallas Clark
@jvannistelrooy Jest szansa, że ​​będziesz musiał ponownie uruchomić Terminal, aby zmiany zaczęły obowiązywać
Dallas Clark
11

Po pierwsze, zwróć uwagę na ostrzeżenia w powyższej odpowiedzi Christophera.

Następnie, jeśli nadal chcesz wyłączyć automatyczną edycję wiadomości zatwierdzania scalającego, ustaw tę zmienną środowiskową:

    GIT_MERGE_AUTOEDIT=no

Ta zmienna środowiskowa i jej ustawienie „nie” są udokumentowane na stronie dokumentu git merge . Zaleca się używanie go tylko w skryptach, które muszą łączyć się w sposób nieinteraktywny, ale oczywiście można go ustawić jako część środowiska powłoki, aby jego efekty były bardziej trwałe.

emackey
źródło
Czy możesz wyjaśnić, czym może się to różnić od używania --no-editflagi?
Alexander Mills,
2
Nie znam różnicy funkcjonalnej, ale wygoda sprawia, że ​​warto. --no-editFlaga musi być powtórzone w wierszu poleceń z każdym użyciu, ponieważ nie wydaje się, aby pracować w ustawieniach, jak opisano w odpowiedzi Dallas Clarka tutaj. Ustawienie zmiennej środowiskowej to jedyny znany mi sposób, aby to ustawienie pozostało.
emackey