Jak mogę ustawić i zatwierdzić wszystkie pliki, w tym nowo dodane pliki, za pomocą jednego polecenia?

425

Jak mogę ustawić i zatwierdzić wszystkie pliki, w tym nowo dodane pliki, za pomocą jednego polecenia?

Anantha Kumaran
źródło
3
Frustrujące jest to, że kiedyś było to możliwe i była to standardowa składnia do zatwierdzania i dodawania jakichkolwiek nowych plików: git commit -a Ale prawda, że ​​się zmieniła, zmieniono składnię git. Zmieszało to istniejących użytkowników (i złamało ich skrypty), wyeliminowało użyteczną funkcjonalność i zastąpiło niepotrzebną flagę.
fijiaaron
1
Jest duplikat tego w git add -A, git commit w jednym poleceniu? . Zaakceptowana odpowiedź jest podobna do przyjętej tutaj, ale sugeruje utworzenie aliasu git w celu skrócenia wymaganego wpisywania (i pokazuje, jak to zrobić).
Mark Amery
Możliwy duplikat Git add i commit jednym poleceniem
Luciano

Odpowiedzi:

568

Robi

git add -A && git commit -m "Your Message"

liczyć się jako „pojedyncze polecenie”?

Edytuj na podstawie poniższej odpowiedzi @ thefinnomenon :

Aby mieć to jako git alias, użyj:

git config --global alias.coa '!git add -A && git commit -m'

i zatwierdzaj wszystkie pliki, w tym nowe pliki, za pomocą wiadomości zawierającej:

git coa "A bunch of horrible changes"

Objaśnienie (z git adddokumentacji ):

-A, --all, --no-ignore-remove

Zaktualizuj indeks nie tylko tam, gdzie drzewo robocze ma pasujący plik, ale także tam, gdzie indeks ma już wpis. To dodaje, modyfikuje i usuwa wpisy indeksu, aby pasowały do ​​drzewa roboczego.

Jeśli nie <pathspec>podano nie, gdy użyto opcji -A, wszystkie pliki w całym drzewie roboczym są aktualizowane (stare wersje Git służyły do ​​ograniczania aktualizacji do bieżącego katalogu i jego podkatalogów).

Ian Clelland
źródło
3
co z komunikatem zatwierdzenia?
Narendra Jaggi
11
@NarendraJaggi git add -A&& git commit -m „Your Message”
Dr.jacky
1
można to umieścić we własnym pliku .sh lub .bat i użyć go jako jednego polecenia. Wiadomość może być param1
BlueWizard
Możesz także dodać skróty do podstawowych poleceń git w swoim .bashrc: alias gpl = 'git pull' alias gps = 'git push' alias gc = 'git commit' alias gs = 'git status' alias gd = 'git diff' alias ga = 'git add' alias gck = 'git checkout' alias gb = 'git branch' alias gl = 'git log' alias lcp = 'git format-patch -1 HEAD' alias resetToMaster = 'git reset - hard origin / master '
ni3
3
W PowerShell zamień „&&” na „;” aby uruchomić oba polecenia, w ten sposób:git add -A ; git commit -m "Your Message"
Rafael Miceli
415

To polecenie doda i zatwierdzi wszystkie zmodyfikowane pliki, ale nie nowo utworzone pliki .

git commit -am  "<commit message>"

Od man git-commit:

   -a, --all
       Tell the command to automatically stage files that have been modified
       and deleted, but new files you have not told Git about are not
       affected.
Jai Keerthi
źródło
101
To tak naprawdę nie odpowiada na pytanie, w rzeczywistości (pogrubione i nie mniej) wyklucza jedną z kluczowych części poszukiwanego rozwiązania.
Arunas,
6
Nie dodaje ani nie śledzi plików.
b15
3
Ale dotyczy to najbardziej typowej sytuacji, gdy popełniasz po „git add -A” i zauważasz, że zapomniałeś zmienić coś małego w kodzie. Nienawidzę pisać tego samego komunikatu zatwierdzenia kilka razy od zera
KorbenDallas
ale wątek mówi: WSZYSTKIE PLIKI, więc myślę, że ten się nie liczy
Frederick G. Sandalo
Możesz także dodać skróty do podstawowych poleceń git w swoim .bashrc: alias gpl = 'git pull' alias gps = 'git push' alias gc = 'git commit' alias gs = 'git status' alias gd = 'git diff' alias ga = 'git add' alias gck = 'git checkout' alias gb = 'git branch' alias gl = 'git log' alias lcp = 'git format-patch -1 HEAD' alias resetToMaster = 'git reset - hard origin / master '
ni3
26

Korzystam z tej funkcji:

gcaa() { git add --all && git commit -m "$*" }

W moim pliku konfiguracyjnym zsh, więc mogę po prostu:

> gcaa This is the commit message

Aby automatycznie wykonać etap i zatwierdzić wszystkie pliki.

phlppn
źródło
1
dla bash-likefunction gcaa() { git add --all && git commit -m "$*" && git push }
Damilola
1
@Damilola - co rozumiesz przez bash-like ? składnia w odpowiedzi działa również w bash
Eliran Malka
to jest miłe, wcześniej użyłem aliasu takiego jak, gaa && gc -m "my commit"ale to jest o wiele ładniejsze ... <pospiesz się, by zmienić bashrc ..>
andy mccullough
24

Nie jestem pewien, dlaczego wszystkie te odpowiedzi tańczą wokół tego, co uważam za właściwe rozwiązanie, ale do tego, co jest tutaj warte, używam:

Utwórz alias:

git config --global alias.coa '!git add -A && git commit -m'

Dodaj wszystkie pliki i zatwierdź za pomocą wiadomości:

git coa "A bunch of horrible changes"

UWAGA: coajest skrótem od zatwierdzenia wszystkich i można go zastąpić czymkolwiek, czego dusza zapragnie

ostatni numer
źródło
1
Żadna odpowiedź inna niż ta z powodzeniem upraszcza proces zatwierdzania wszystkich za pomocą wiadomości.
Seph Reed,
2
To jest niesamowite, szukałem git aliasdrogi, reszta jest nudna.
Qortex,
9

Zatwierdzanie w git może być procesem wieloetapowym lub jednym krokiem, w zależności od sytuacji.

  1. W tej sytuacji zaktualizowano wiele plików i chcesz zatwierdzić:

    Musisz dodać wszystkie zmodyfikowane pliki przed dokonaniem czegokolwiek.

    git add -A
    

    lub

    git add --all
    
  2. Następnie możesz użyć zatwierdzenia wszystkich dodanych plików

    git commit
    

    z tym musisz dodać wiadomość dla tego zatwierdzenia.

King Linux
źródło
6

Jeśli chcesz po prostu „szybkiego i brudnego” sposobu ukrywania zmian w bieżącej gałęzi, możesz użyć następującego aliasu:

git config --global alias.temp '!git add -A && git commit -m "Temp"'  

Po uruchomieniu tego polecenia możesz po prostu wpisać, git tempaby git automatycznie zatwierdzał wszystkie zmiany w bieżącej gałęzi jako zatwierdzenie o nazwie „Temp”. Następnie możesz użyć git reset HEAD~później, aby „odrzucić” zmiany, aby kontynuować ich pracę lub git commit --amenddodać więcej zmian do zatwierdzenia i / lub nadać mu odpowiednią nazwę.

Ajedi32
źródło
4

Mam w swojej konfiguracji dwa aliasy:

alias.foo=commit -a -m 'none'
alias.coa=commit -a -m

jeśli jestem zbyt leniwy, po prostu zatwierdzam wszystkie zmiany

git foo

i po prostu zrobić szybkie zatwierdzenie

git coa "my changes are..."

coa oznacza „popełnij wszystko”

SystematicFrank
źródło
9
Nienawidzę pracować z repozytorium wypełnionym komunikatami zatwierdzającymi, mówiącymi „brak”, i na tej podstawie odrzucam też wszelkie PR. Niestety, jedynym sposobem, aby dowiedzieć się, jak ważne jest posiadanie dobrych komunikatów o zatwierdzeniach, jest powrót do audytu czegoś napisanego dawno temu („ten wiersz powoduje błąd… dlaczego został nawet dodany i czy cokolwiek przerwać, jeśli go zmienię / usunę? ”).
gregmac
1
Zatwierdzenia z „none” nigdy nie są przeznaczone na długo. Zwykle zakładam własną gałąź funkcji, wykonuję mikro zatwierdzenia i wyciskam je w coś bardziej sensownego przed scaleniem. Oczywiście ludzie, którzy dokonują zatwierdzeń dla każdej zmodyfikowanej funkcji i nie mają nic przeciwko pełnemu wydaniu dziennika git, nie potrzebują tego.
SystematicFrank
1
W tym celu używam „wip” (skrót od „praca w toku”) zamiast „none” i wypycham tylko takie zobowiązania do moich prywatnych oddziałów.
Sergej Koščejev
Nadal jest nieprzydatny, ponieważ ostatecznie te zatwierdzenia „wip” lub „none” przekształcą go w gałąź, którą widzą inni ludzie, i skazą dziennik wiadomości. Jeśli zmiażdżysz wszystkie swoje zobowiązania przed pchnięciem, byłoby to do przyjęcia, ale poza tym nadal jest irytujące dla zespołu.
Jordan
To świetny pomysł, a łącząc go z następną odpowiedzią, możesz uzyskać 100% dokładną odpowiedź dla PO. Właściwie przedstawiłem niezbędne kroki (używając git-bash) w mojej odpowiedzi. ( stackoverflow.com/a/43442269/869239 )
VeRo
3

Uruchom podane polecenie

git add . && git commit -m "Changes Committed"

Jednak nawet jeśli wydaje się to pojedynczym poleceniem, to dwa osobne polecenia są uruchamiane jeden po drugim. Tutaj po prostu &&je łączyliśmy. Nie różni się niczym od biegania git add .i git commit -m "Changes Committed"osobno. Możesz uruchamiać wiele poleceń razem, ale sekwencja ma tutaj znaczenie. Jeśli chcesz przesłać zmiany na zdalny serwer wraz z przemieszczaniem i zatwierdzeniem, możesz to zrobić, jak podano,

git add . && git commit -m "Changes Committed" && git push origin master

Zamiast tego, jeśli zmienisz sekwencję i umieścisz na pushpierwszym miejscu, zostanie ona wykonana jako pierwsza i nie da pożądanego popchnięcia po przemieszczeniu i zatwierdzenia tylko dlatego, że już działała jako pierwsza.

&&uruchamia drugie polecenie w wierszu, gdy pierwsza komenda wraca pomyślnie, lub z poziomu błędu 0. przeciwieństwem &&Is ||, który prowadzi drugą komendę, gdy pierwsza komenda nie powiedzie, lub z poziomu błędu 1.

Alternatywnie możesz utworzyć alise as git config --global alias.addcommit '!git add -a && git commit -m'i użyć go jakogit addcommit -m "Added and commited new files"

Kiran Maniya
źródło
2

Świetne odpowiedzi, ale jeśli szukasz pojedynczej linii, zrób wszystko, możesz połączyć, alias i cieszyć się wygodą:

git add * && git commit -am "<commit message>"

Jest to pojedynczy wiersz, ale dwa polecenia i, jak wspomniano, możesz aliasować te polecenia:

alias git-aac="git add * && git commit -am " (spacja na końcu jest ważna), ponieważ sparametryzujesz nowe polecenie krótkiej ręki.

Od tego momentu będziesz używać tego aliasu:

git-acc "<commit message>"

Zasadniczo mówisz:

git, dodaj dla mnie wszystkie nieśledzone pliki i zatwierdź je za pomocą podanego komunikatu zatwierdzenia.

Mam nadzieję, że używasz Linuksa, mam nadzieję, że to pomoże.

VeRo
źródło
0

Możesz napisać mały skrypt (spójrz na odpowiedź Iana Clellanda), git-commitallktóry używa kilku poleceń git do wykonania tego, co chcesz zrobić.
Umieść ten skrypt w dowolnym miejscu w swoim $PATH. Możesz to nazwać git commitall... bardzo przydatnym!

Znaleziono tutaj (pytanie i wszystkie odpowiedzi niestety usunięte, widoczne tylko przy wysokiej reputacji)

tanascius
źródło
Cały wątek jest dobrą lekturą ... dlatego połączyłem go ^^
tanascius
@Dimitri - niestety niektórzy studid ludzie postanowili usunąć ten przydatny wątek. Nadal jest widoczny przy wysokiej reputacji, dlatego trzymam link tutaj.
tanascius
0

spróbuj użyć:

git add . && git commit -m "your message here"
Foton
źródło