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ć).
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).
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.
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.
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ę.
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,
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"
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)
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.
Odpowiedzi:
Robi
liczyć się jako „pojedyncze polecenie”?
Edytuj na podstawie poniższej odpowiedzi @ thefinnomenon :
Aby mieć to jako
git alias
, użyj:i zatwierdzaj wszystkie pliki, w tym nowe pliki, za pomocą wiadomości zawierającej:
Objaśnienie (z
git add
dokumentacji ):źródło
git add -A ; git commit -m "Your Message"
To polecenie doda i zatwierdzi wszystkie zmodyfikowane pliki, ale nie nowo utworzone pliki .
Od man git-commit:
źródło
Korzystam z tej funkcji:
W moim pliku konfiguracyjnym zsh, więc mogę po prostu:
Aby automatycznie wykonać etap i zatwierdzić wszystkie pliki.
źródło
function gcaa() { git add --all && git commit -m "$*" && git push }
gaa && gc -m "my commit"
ale to jest o wiele ładniejsze ... <pospiesz się, by zmienić bashrc ..>Jednowierszowy, aby wyeksponować WSZYSTKIE pliki ( zmodyfikowane , usunięte i nowe ) i zatwierdzić z komentarzem:
http://git-scm.com/docs/git-add
http://git-scm.com/docs/git-commit
źródło
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:
Dodaj wszystkie pliki i zatwierdź za pomocą wiadomości:
UWAGA:
coa
jest skrótem od zatwierdzenia wszystkich i można go zastąpić czymkolwiek, czego dusza zapragnieźródło
git alias
drogi, reszta jest nudna.Zatwierdzanie w git może być procesem wieloetapowym lub jednym krokiem, w zależności od sytuacji.
W tej sytuacji zaktualizowano wiele plików i chcesz zatwierdzić:
Musisz dodać wszystkie zmodyfikowane pliki przed dokonaniem czegokolwiek.
lub
Następnie możesz użyć zatwierdzenia wszystkich dodanych plików
z tym musisz dodać wiadomość dla tego zatwierdzenia.
źródło
Jeśli chcesz po prostu „szybkiego i brudnego” sposobu ukrywania zmian w bieżącej gałęzi, możesz użyć następującego aliasu:
Po uruchomieniu tego polecenia możesz po prostu wpisać,
git temp
aby 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ę lubgit commit --amend
dodać więcej zmian do zatwierdzenia i / lub nadać mu odpowiednią nazwę.źródło
Mam w swojej konfiguracji dwa aliasy:
jeśli jestem zbyt leniwy, po prostu zatwierdzam wszystkie zmiany
i po prostu zrobić szybkie zatwierdzenie
coa oznacza „popełnij wszystko”
źródło
Uruchom podane polecenie
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 bieganiagit add .
igit 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,Zamiast tego, jeśli zmienisz sekwencję i umieścisz na
push
pierwszym 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"
źródło
Ś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.
źródło
Możesz napisać mały skrypt (spójrz na odpowiedź Iana Clellanda),
git-commitall
któ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)
źródło
spróbuj użyć:
źródło