Git commit otwiera pusty plik tekstowy, po co?

93

We wszystkich samouczkach Git, które przeczytałem, mówią, że możesz:

git init
git add .
git commit

Kiedy to robię, otwiera się duży plik tekstowy. Żaden z samouczków nie wydaje się rozwiązać tego problemu, więc nie wiem, co zrobić z plikiem ani co w nim umieścić, jeśli cokolwiek.

losowy
źródło

Odpowiedzi:

124

Masz zamiar umieścić komunikat o zatwierdzeniu w tym pliku tekstowym, a następnie zapisać i zakończyć.

Możesz zmienić domyślny edytor tekstu używany przez git za pomocą tego polecenia:

git config --global core.editor "nano"

Musisz zmienić nano na dowolne polecenie, które normalnie otworzyłoby twój edytor tekstu.

vikhyat
źródło
15
Nie musisz dodawać, --globalaby zmienić ustawienie domyślne?
Znarkus
4
@Znarkus dobra uwaga. Więcej informacji znajdziesz tutaj . Zasadniczo udzielona odpowiedź zmieniłaby tylko ustawienie dla bieżącego projektu, natomiast --globalzmieniłaby je dla bieżącego użytkownika i --systemzmieniłaby je dla wszystkich na tym komputerze.
Matt Fenwick
24
Chociaż ta odpowiedź zawiera dobre informacje, nie odnosi się do rzeczywistego pytania.
Adrian Schmidt
5
Nie rozumiem, dlaczego to podwoiło liczbę głosów pozytywnych, ponieważ niektóre odpowiedzi NAPRAWDĘ odpowiadają na pytanie. Tak nie jest.
Johan,
2
@Johan, nie mylisz się, ale natknąwszy się na to, uznałem tę odpowiedź za niezwykle pomocną. Więc zagłosowałem za tym.
Danation,
65

Jak wspomniał Ben Collins , bez rozszerzenia-m "..." argumentu wpisującego zatwierdzenie w wierszu (co jest ogólnie złym pomysłem, ponieważ zachęca do bycia zwięzłym), ten "duży plik tekstowy", który jest otwierany jest oknem, w którym można wpisać komunikat o zatwierdzeniu .

Zwykle zaleca się napisanie podsumowania w pierwszej linii, pominięcie linii, a następnie umieszczenie bardziej szczegółowych notatek pod spodem; pomaga to programom, które wykonują takie rzeczy, jak wysyłanie wiadomości e-mail z zatwierdzeniem z odpowiednim wierszem tematu i pełną listą zmian wprowadzonych w treści.

Zamiast zmieniać EDITORzmienną powłoki, możesz także zmienić używany edytor, dodając dodatkowe linie w swoim ~/.gitconfigpliku:

[core]
    editor = emacs
    excludesfile = /Users/will/.gitignore

Ta druga linia właściwie nie ma nic wspólnego z twoim problemem, ale uważam ją za bardzo użyteczną, więc mogę wypełnić mój ~/.gitignoreplik tymi wszystkimi typami plików, o których wiem , że nigdy, przenigdy nie będę chciał zatwierdzić repozytorium.

Will Robertson
źródło
36

Otwierany plik tekstowy jest podsumowaniem aktualnej operacji zatwierdzania. Zatwierdzenie git przenosi cię do tego pliku, więc możesz dodać komunikat o zatwierdzeniu na górze pliku. Po dodaniu wiadomości po prostu zapisz i zamknij ten plik.

W poleceniu tym znajduje się również przełącznik „-m msg”, który umożliwia dodanie komunikatu o zatwierdzeniu w wierszu poleceń.

Lou
źródło
Cześć Lou, jestem też początkującym w GIt. Myślę, że po tym, jak istnieję lub napiszę i zaistnieję w pliku tekstowym, git tak naprawdę nie zatwierdził etapów i komunikatu o zmianach, które właśnie napisałem. Więc jakie jest znaczenie dodania wiadomości do tego pliku tekstowego, jeśli nie mogę wykonać zatwierdzenia po zapisaniu i wyjściu z niego. (proszę poprawić mnie, jeśli się myliłem, wielkie dzięki)
SLN
@SLN Scenariusz, który nakreślasz, nie jest zbyt jasny. Zgadnę i zasugeruję, że być może nie wystawiłeś żadnego pliku do zatwierdzenia, więc twoja próba zatwierdzenia nic nie dała. Użyj "git add" do plików pierwszego etapu, które chcesz zatwierdzić, a następnie "git commit", aby wykonać faktyczne zatwierdzenie.
Lou
15

Jeśli korzystasz z Mac OS X i korzystasz z BBEdit, możesz ustawić to jako edytor z wyboru dla komunikatów o zatwierdzeniach:

git config --global core.editor "bbedit -w"

Po zakończeniu edycji zapisz i zamknij plik, a git użyje go do komentarzy.


źródło
15

Zakładając, że domyślnym edytorem jest vi / vim, możesz wyjść z edytora komunikatów o zmianach, wpisując:

:x

co zapisze i zamknie plik komunikatu o zmianach. Następnie wrócisz do normalnej sekcji poleceń git.

Więcej poleceń vi:
http://www.lagmonster.org/docs/vi.html

MatthiasS
źródło
9
Jeśli jesteś podobny do mnie, byłeś w trybie wstawiania / zamiany (tj. Wpisywania komunikatu o zatwierdzeniu). Jeśli tak, musisz nacisnąć, escaby przejść do trybu poleceń, zanim wpiszesz, :xaby zapisać i wyjść.
Martin Carney
1
Zakładając oczywiście, że jego edytor domyślnie to vi / vim. To nie byłoby prawdą dla wszystkich. Na pewno nie dla tego użytkownika emacsa;)
haziz
Oszczędziło mi to wielu kłopotów. Dziękuję bardzo
Danation,
12

Jak wszyscy powiedzieli, jest to tylko miejsce, w którym dodajesz komentarz do zatwierdzenia - ale dla niektórych może to być mylące, szczególnie jeśli nie skonfigurowałeś ustawień edytora i nie jesteś świadomy tego, czym jest VI : wtedy możesz być w szoku , ponieważ pomyślisz, że nadal jesteś w GIT-Bash

W takim przypadku jesteś w edytorze tekstu i masz kilka interesujących sposobów radzenia sobie z różnymi problemami, a ten zestaw poleceń może ci pomóc, abyś mógł ominąć pierwsze zatwierdzenie, a następnie skonfigurować edytor, który znasz lub używać go jako możliwość nauczenia się, jak go używać.

Stephen Bailey
źródło
8
Wiem, że kończenie na vi zawsze mnie szokuje :)
Will Robertson,
1
Teraz sprawy mają o wiele więcej sensu. +1
Matt Ellen
11

-mOpcja popełnić pozwala wprowadzić commit wiadomość z wiersza poleceń:

git commit -m "my first commit"
Greg Hewgill
źródło
7

Kiedy tworzysz nowy commit, git uruchamia edytor tekstu i zapisuje w nim kilka rzeczy.

Używając tego edytora tekstu, zamierzasz napisać wiadomość o zatwierdzeniu, która będzie powiązana z twoim cielesnie utworzonym zatwierdzeniem.

Po zakończeniu zapisz i zamknij edytor tekstu. Git użyje tego, co napisałeś jako wiadomość do zatwierdzenia.

Komunikat zatwierdzenia ma określoną strukturę, opisaną w następujący sposób:

Pierwsza linia komunikatu o zatwierdzeniu jest używana jako nagłówek (lub tytuł) wiadomości. Preferowana długość nagłówka zatwierdzenia jest mniejsza niż 40 znaków, ponieważ jest to liczba znaków, które github wyświetla na karcie Commits danego repozytorium przed jego obcięciem, co niektórzy uważają za irytujące.

Podczas tworzenia nagłówka powszechną praktyką jest użycie czasownika w czasie teraźniejszym pisanym wielką literą dla pierwszego słowa, choć nie jest to wcale wymagane.

Jeden nowy wiersz wyznacza nagłówek i treść wiadomości.

Ciało może składać się z tego, co chcesz. Przegląd zmian wprowadzonych przez Twoje zatwierdzenie jest rozsądny. Niektóre aplikacje innych firm używają informacji zawartych w treści komunikatów o zatwierdzeniu, aby wyzwalać różne rodzaje zaczepów (myślę, że Gerrit i Pivotal Tracker, żeby wymienić dwa).

Oto krótki i słodki przykład. Wiodący #oznacza komentarz.

Gitignore index.pyc

Ignore gunicorn generated binary file
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch dev
# Your branch is ahead of 'origin/dev' by 10 commits.
#   (use "git push" to publish your local commits)
#
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   .gitignore
#

Tutaj jeden pan Torvalds wypowiada się na temat tego, co jest dobrym zobowiązaniem.

I tutaj Tpope robi podobnie.

Jak stwierdzono w kilku innych odpowiedziach, zmiana domyślnego edytora to jedna linijka w linii poleceń.

Moje preferencje:

git config --global core.editor "vim"
nie, dziękuję
źródło
2
powinna to być akceptowana odpowiedź na pytanie.
mppfiles
6

Po wpisaniu wiadomości spróbuj Escape, a następnie ZZ. Jak powiedzieli inni, po uruchomieniu tego polecenia commit w rzeczywistości uruchamia edytor tekstu, do którego wprowadza wiadomość. W moim przypadku (OS X) był to VI, który odkryłem po pewnym czasie. W takim przypadku naciśnij Escape, aby przejść do trybu „poleceń” (w przeciwieństwie do trybu INSERT) i wprowadź ZZ. Jestem pewien, że istnieją inne sposoby wykonania tego zadania, ale to wystarczyło. Ponieważ nigdy nie korzystałem z VI ani emacsa, nie było to dla mnie oczywiste i nie zostało wspomniane w żadnym z podręczników dla początkujących, których używałem. Mam nadzieję, że to pomoże.

TheGeoff
źródło
4

git commitPolecenie otworzy edytor określonym wEDITOR zmiennej środowiskowej, dzięki czemu można wprowadzić popełnić komentarz. W systemie Linux lub BSD powinno to być domyślnie vi, chociaż każdy edytor powinien działać.

Wystarczy wpisać swoje uwagi i zapisać plik.

Ben Collins
źródło
2

Byłem zdezorientowany, ponieważ próbowałem wprowadzić nazwę pliku po: w w VIM. To nie powoduje zatwierdzenia. Zamiast tego otrzymywałem komunikat „Przerwanie zatwierdzenia z powodu pustego komunikatu zatwierdzenia”. Nie umieszczaj nazwy pliku po: w. : w domyślnie zapisuje plik w .git / COMMIT_EDITMSG. Następnie: q aby zakończyć i zakończyć zatwierdzanie. Możesz zobaczyć wyniki za pomocą dziennika git.

user360221
źródło
lub możesz po prostu użyć: x, aby zapisać i wyjść.
TJ Ellis
2

Teraz, gdy zmieniłem edytor na emacs, wszystko działa dobrze.

Ale zanim to ustawiłem, polecenie „git commit -a” otworzyło program gedit, ale również natychmiast zakończyło się komunikatem „Aborting commit due to empty commit message.”. Zapisanie pliku z gedit nie przyniosło żadnego efektu. Jawne ustawienie edytora z opcją "git config --global core.editor" gedit "" dało ten sam wynik.

Nie ma nic złego w emacsie, ale z ciekawości, dlaczego to nie działa z gedit i czy jest jakiś sposób, aby to zadziałało?

Dzięki.

Piotr
źródło
jeśli gedit już działa, wykonanie "gedit file.txt" otworzy plik w istniejącym oknie i natychmiast zwróci ... powinieneś zamieścić to jako rzeczywiste pytanie, szczególnie o używaniu gedit z git.
araqnid
6
wpadłem na to też. możesz to naprawić, ustawiając gedit tak, aby działał w trybie samodzielnym:git config --global core.editor "gedit -s"
brittohalloran
2

Dla tych z Was, którzy używają OS XI, to polecenie działa dobrze:
git config --global core.editor "open -t -W"

co zmusi git do otwarcia domyślnego edytora tekstu (w moim przypadku textedit), a następnie zaczekania na zamknięcie aplikacji. Pamiętaj, że musisz napisać „Save”, a następnie „Quit”, zanim zatwierdzenie zostanie wykonane. Istnieje kilka innych poleceń, z którymi możesz się bawić, jak opisano na tej stronie:

Biblioteka programisty Apple - polecenie Otwórz

Możesz także spróbować, git config --global core.editor "open -e -W"jeśli chcesz, aby git zawsze otwierał textedit, niezależnie od tego, jaki jest domyślny edytor.

JiuJitsuCoder
źródło
1

Tak, upewnij się, że masz rozsądny zestaw edytorów. Nie jestem pewien, jaki będzie domyślny edytor, ale jeśli, tak jak ja, jest to nano (powie gdzieś u góry po wpisaniu zatwierdzenia), wystarczy wpisać komentarz, a następnie nacisnąć Ctrl-x, aby zakończyć. Następnie naciśnij y, a następnie Enter, aby potwierdzić zatwierdzenie.

Ponadto, jeśli chcesz zobaczyć prostą listę plików, które będziesz zatwierdzać, zamiast ogromnej listy różnic, spróbuj wcześniej

git diff --name-only
Tom Martin
źródło
1

Wykonując kontrolę wersji, zawsze powinieneś wyjaśnić, jakie zmiany wprowadziłeś. Zwykle za pierwszym razem pojawia się komentarz, taki jak „Wstępne zatwierdzenie”.

Jednak na dłuższą metę chcesz zrobić dobry komentarz do każdego zatwierdzenia. Będziesz chciał czegoś w formie:

Dodano funkcję eksperymentalną x.

X zwiększy wydajność funkcji Y w stanie Z. Jeśli potrzebujesz X, aktywuj ją za pomocą przełączników -x lub --feature-eks. Dotyczy to żądania funkcji nr 1138.

Płomień
źródło
1

Będąc nowicjuszem w Terminalu, „Escape, a potem ZZ” zadziałało dla mnie. Miałem ten problem od miesięcy i nie mogłem znaleźć sposobu na obejście tego problemu.

Dzięki TheGeoff za prostą radę!

Yarito
źródło
0

Oto prawdopodobnie najłatwiejszy sposób zatwierdzania wszystkich zmian:

git commit -a -m "Type your commit message here..."

Oczywiście istnieją znacznie bardziej szczegółowe sposoby angażowania się, ale to powinno zacząć.

PHLAK
źródło