Як я можу поетапно виконувати всі файли, включаючи щойно додані файли, використовуючи одну команду?


425

Як я можу поетапно виконувати всі файли, включаючи щойно додані файли, використовуючи одну команду?


3
Найспритніше полягає в тому, що це було можливо і було стандартним синтаксисом для фіксації та додавання будь-яких нових файлів: git commit -a Але правда для форми, синтаксис git змінився. Це заплутало існуючих користувачів (і порушило їхні сценарії), усунуло корисну функціональність та замінило непотрібний прапор.
fijiaaron

1
Існує дублікат цього в git add -A, git počin в одній команді? . Тут прийнята відповідь схожа на прийняту відповідь, але пропонує створити псевдонім git для скорочення введеного тексту (і показує, як це зробити).
Марк Амері

Відповіді:


568

Чи

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

вважати "єдиною командою"?

Редагувати на основі відповіді @ thefinnomenon нижче :

Щоб мати його як a git alias, використовуйте:

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

і ввести всі файли, включаючи нові файли, з повідомленням:

git coa "A bunch of horrible changes"

Поясненняgit addдокументації ):

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

Оновіть індекс не лише там, де у робочому дереві є відповідність файлу, але і там, де в індексі вже є запис. Це додає, модифікує та видаляє записи індексу, щоб відповідати робочому дереву.

Якщо <pathspec>при використанні параметра -A не вказано, усі файли у всьому робочому дереві оновлюються (старі версії Git використовуються для обмеження оновлення до поточного каталогу та його підкаталогів).


3
як щодо повідомлення про фіксацію?
Нарендра Яггі

11
@NarendraJaggi git add -A && git commit -m "Ваше повідомлення"
Dr.jacky

1
можна помістити це у власний .sh або .bat файл і просто використовувати його як одну команду. Повідомлення може бути param1
BlueWizard

А також ви можете додати ярлики до основних команд git у свій .bashrc: alias gpl = 'git pull' псевдонім gps = 'git push' alias gc = 'git commit' псевдонім gs = 'git status' alias gd = 'git diff' псевдонім ga = 'git add' псевдонім gck = 'git checkout' псевдонім gb = 'git гілка' псевдонім gl = 'git log' псевдонім lcp = 'git format-patch -1 HEAD' псевдонім resetToMaster = 'git reset --hard origin / майстер '
ni3

3
У повному обсязі замініть "&&" на ";" виконувати обидві команди, як ось це:git add -A ; git commit -m "Your Message"
Рафаель Міцелі

415

Ця команда додасть і заповнить усі змінені файли, але не новостворені файли .

git commit -am  "<commit message>"

Від людини git-počin:

   -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.

101
Це фактично не відповідає на питання, адже конкретно (напівжирним не менш) виключається одна з ключових частин шуканого рішення.
Арунас

6
Не додає і не виконує відслідковування файлів.
b15

3
Але він охоплює найбільш типову ситуацію, коли ви здійснюєте після "git add -A" і помічаєте, що ви забули змінити щось невелике в коді. Я ненавиджу писати одне і те ж повідомлення про кілька разів з нуля
KorbenDallas

але початковий потік говорить ВСІ ФАЙЛИ, так що, я думаю, цей не
рахується

А також ви можете додати ярлики до основних команд git у свій .bashrc: alias gpl = 'git pull' псевдонім gps = 'git push' alias gc = 'git commit' псевдонім gs = 'git status' alias gd = 'git diff' псевдонім ga = 'git add' псевдонім gck = 'git checkout' псевдонім gb = 'git гілка' псевдонім gl = 'git log' псевдонім lcp = 'git format-patch -1 HEAD' псевдонім resetToMaster = 'git reset --hard origin / майстер '
ni3

26

Я використовую цю функцію:

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

У моєму конфігураційному файлі zsh, тому я можу просто зробити:

> gcaa This is the commit message

Автоматично створювати поетапно і робити всі файли


1
для bash-likefunction gcaa() { git add --all && git commit -m "$*" && git push }
Дамілола

1
@Damilola - що ви маєте на увазі під bash-like ? синтаксис у відповіді працює і в
башті

це добре, я раніше використовував псевдонім на кшталт, gaa && gc -m "my commit"але це набагато приємніше ... <скрути, щоб змінити bashrc ..>
Енді mccullough


24

Не впевнений, чому ці відповіді всі танцюють навколо того, що я вважаю правильним рішенням, але для чого тут варто те, що я використовую:

Створіть псевдонім:

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

Додайте всі файли та покладіть повідомлення:

git coa "A bunch of horrible changes"

ПРИМІТКА: coaце короткий термін, щоб здійснити все, і його можна замінити тим, що бажає ваше серце


1
Немає жодної відповіді, окрім цього, успішно спрощує процес здійснення всіх повідомлень.
Seph Reed

2
Це дивовижно, шукали git aliasдорогу, решта нудна.
Qortex

9

Здійснення в git може бути багатоетапним процесом або одним кроком залежно від ситуації.

  1. У цій ситуації ви оновлювали кілька файлів і хочете здійснити:

    Ви повинні додати всі змінені файли, перш ніж щось робити.

    git add -A
    

    або

    git add --all
    
  2. Після цього ви можете скористатись усіма доданими файлами

    git commit
    

    з цим вам потрібно додати повідомлення для цього зобов’язання.


6

Якщо ви просто хочете "швидкий і брудний" спосіб приховати зміни в поточній гілці, ви можете використовувати наступний псевдонім:

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

Після запуску цієї команди ви можете просто ввести, git tempщоб git автоматично здійснював усі ваші зміни в поточній гілці як комісія під назвою "Темп". Потім ви можете git reset HEAD~пізніше скористатися для "скасування" змін, щоб ви могли продовжувати працювати над ними, або git commit --amendдодати більше змін до комісії та / або дати їй належне ім'я.


4

У мене в налаштуваннях два псевдоніми:

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

якщо я занадто ледачий, я просто здійснюю всі зміни

git foo

і просто зробити швидкий вчинок

git coa "my changes are..."

coa означає "зробити все"


9
Мені б не хотілося працювати з сховищем, заповненим повідомленнями про фіксацію, що говорять "ні", і я б відхиляв будь-які PR на цій основі. На жаль, єдиний спосіб дізнатися важливість хороших повідомлень про фіксацію - це коли вам потрібно повернутися до аудиту чогось написаного давно ("цей рядок викликає помилку ... чому його навіть додали, і чи буде що-небудь зламатися, якщо я його зміню / видалю? ").
gregmac

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

1
Я використовую для цієї мети 'wip' (скорочення «незавершене виробництво») замість «жодного», і я передаю такі зобов'язання лише до своїх приватних відділень.
Сергій Кошєєв

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

Це ідея грати, і комбінуючи її з наступною відповіддю, ви зможете фактично отримати 100% точну відповідь на ОП. Я фактично окреслив необхідні кроки (використовуючи git-bash) у своїй відповіді. ( Stackoverflow.com/a/43442269/869239 )
Vero

3

Виконайте задану команду

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

Однак, навіть якщо це здається однією командою, це дві окремі команди, що виконуються одна за одною. Тут ми просто &&їх поєднували. Це не сильно відрізняється від бігу git add .та git commit -m "Changes Committed"окремо. Ви можете запускати кілька команд разом, але тут важлива послідовність. Як, якщо ви хочете перенести зміни на віддалений сервер разом із постановкою та зобов’язанням, ви можете зробити це як задано,

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

Натомість, якщо ви зміните послідовність і поставите pushперше, воно буде виконане першим і не дає бажаного поштовху після постановки та виконання лише тому, що воно вже запустилося першим.

&&запускає другу команду на лінії , коли перша команда повертається успішно, або з рівнем помилок 0. протилежності &&IS ||, який запускає другу команду , коли перша команда невдало, або з рівнем помилки 1.

Крім того, ви можете створити alise як git config --global alias.addcommit '!git add -a && git commit -m'і використовувати його якgit addcommit -m "Added and commited new files"


2

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

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

Це один рядок, але дві команди, і як уже згадувалося, ви можете мати псевдоніми ці команди:

alias git-aac="git add * && git commit -am " (пробіл в кінці важливий), оскільки ви збираєтесь параметризувати нову команду короткої руки.

З цього моменту ви будете використовувати цей псевдонім:

git-acc "<commit message>"

Ви в основному говорите:

git, додай для мене всі незаймані файли та закріпи їх за допомогою даного повідомлення про фіксацію.

Сподіваюся, ви використовуєте Linux, сподіваюся, що це допоможе.


0

Ви можете написати невеликий сценарій (подивіться на відповідь Іана Клленленда), git-commitallякий використовує кілька команд git для виконання того, що ви хочете зробити.
Розмістіть цей сценарій у будь-якому місці вашого $PATH. Ви можете назвати це за git commitall... дуже зручно!

Знайдено тут (питання та всі відповіді, на жаль, видалено, видно лише з високою репутацією)


Ціла нитка - це добре прочитання ... ось чому я пов’язав її ^^
tanascius

@Dimitri - на жаль, деякі студенти вирішили видалити цю корисну нитку. Це все ще видно з високою репутацією, тому я зберігаю посилання тут.
Танацій

0

спробуйте використовувати:

git add . && git commit -m "your message here"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.