Git додавання та фіксація в одній команді


392

Чи я можу зробити це

git add -A
git commit -m "commit message"

в одній команді?

Я, здається, дуже багато виконує ці дві команди, і якби у Git був такий варіант, як git commit -Am "commit message"би зробити життя набагато зручнішим.

git commitмає -aмодифікатор, але це не зовсім те саме, що робити git add -Aперед вчиненням. git add -Aдодає новостворені файли, але git commit -amні. Що робить?



1
Економія часу та здійснення кожної зміни краще, тому я використовую git commit -am"yes the code in committed"
Різо

git add .- швидший варіант для додавання всіх
Райан

Відповіді:


419

Ви можете використовувати псевдоніми git, наприклад

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

і використовувати його з

git add-commit -m 'My commit message'

EDIT: Повернено до тиків ('), оскільки в іншому випадку воно не вдасться до розширення оболонки в Linux. У Windows слід використовувати замість цього подвійні лапки (") (зазначено в коментарях, не перевіряли).


24
Використовуйте git config --global --unset alias.<your_alias>для скидання псевдоніма.
TMOTTM

11
@MrFusion Це робить команду зовнішньою командою оболонки замість ярлика до внутрішньої команди git, тобто робить весь рядок виконуваним як окремий процес.
Мартін К.

8
Я вважаю за краще, git config --global alias.add-commit '!git add -A && git commit -m'щоб мені не потрібно було друкувати -mкожен раз
лампа розжарювання

21
Мені надто лінь щоразу вводити "add-commit" і "-m". Отже, я git config --global alias.ac '!git add -A && git commit -m' git ac 'comment'
набираю

5
git config --global alias.add-commit "!git add -A && git commit"(тобто подвійні лапки замість одинарних лапок) - це те, що працює в Windows.
Сахед

269
git commit -am "message"

це простий спосіб сказати git видалити файли, які ви видалили, але я зазвичай не рекомендую такі робочі процеси. Команди Git в найкращій практиці повинні бути досить атомарними і стосуватися лише кількох файлів.

git add .
git commit -m "message"

це простий спосіб додавання всіх нових або модифікованих файлів. Також застосовується кваліфікація "лову". Вищевказані команди не видалять файли, видалені без git rmкоманди.

git add app
git commit -m "message"

це простий спосіб додати всі файли до індексу з одного dir, у цьому випадку appdir.


41
або просто git commit -am "message"- просто переконайтеся, що немає нових файлів, які git ще не зібрав. інакше вам потрібно буде використовувати git add . &&перед цим .... щоб це зробити в одному рядку.
Courtimas

2
Вибачте , але оригінальний питання було саме про це - уникнути git add .в разі , якщо файли були додані
Горн

50

Щоб зберегти його в одному рядку, використовуйте:

git add . && git commit -am "comment"

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


12
Слід зазначити, що це специфічно для оболонки Linux (bash та, можливо, інших).
Р. Мартіньо Фернандес

6
git commit -am "comment"ідеально
Абхішек Беді

2
Якщо ви використовували: git add . Тоді вам не потрібно використовувати варіант -a , просто потрібно:git commit -m "comment"
Duc Chi

18

Просто комбінуйте свої команди:

git add -A && git commit -m "comment" 

18

Лише адаптуючи відповідь Алеся та коментар суддів для linux bash :

Щоб зберегти його в одному рядку, використовуйте:

git commit -am "comment"

Цей рядок додасть та вчинить усі зміни сховища.

Просто переконайтеся, що ще немає нових файлів, які git ще не зібрав. інакше вам потрібно буде скористатися:

git add . ; git commit -am "message"


Як це зробити git commit -am "comment", але лише для 1 файла? Скажімо, файл.txt .
Сантош Кумар

git commit -am "comment"- це ярлик для додавання та створення всіх змінених файлів. Якщо ви хочете додати та зафіксувати лише 1 файл, ніж вам потрібно буде виконати:git add file.txt ; git commit -m "comment"
danilo

У другому випадку немає необхідності додавати -a з m. Слід додати git. ; Git
Manish Bansal

12

У пізнішій версії git ви можете додавати та виконувати так

git commit -a -m "commit message"

Додатково ви псевдонім:

[alias]
    ac = commit -a -m

Тоді ви можете використовувати його так:

git ac "commit message"

6
Ця команда не буде фіксувати нові файли, лише оновлені.
рувим

11

На своїй машині Windows я встановив цей .bashrcпсевдонім, щоб зробити весь процес більш простим.

  • створити / знайти своє .bashrc- зверніться до теми SO
  • додати наступний рядок у файл

    alias gacp='echo "enter commit message : " && read MSG && git add . && git commit -m "$MSG" && git push'
    

    це git додає фіксацію та push. налаштувати його будь-яким чином, скажіть, що ви не хочете, щоб команда push видалила цю частину

  • перезавантажте .bashrc/ закрийте та знову відкрийте оболонку

  • тепер ви можете виконати весь процес за допомогою gacpкоманди.

FYI у цього сценарію є git push. Не копіюйте та не вставляйте це.
Яр

11

майже впевнений, що ви можете використовувати:

git commit -am "commit all the things"

1
Ця команда - найкоротший і, мабуть, найпростіший спосіб досягти необхідного результату. Тест на git версії 2.6.3.Windows.1.
Ithar

5
Це звичайно не вносить нові файли, але лише "оновлені" файли!
користувач13107

1
ПРАВИЛЬНО він не почне відслідковувати файли, які не відслідковуються
Блер Андерсон,

@BlairAnderson - Чи є команда додавати непосліджені файли також із додаванням та фіксацією?
MasterJoe2

6

Якщо ви введете:

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

раз, вам просто потрібно буде набрати

git a

кожного разу:

git a 'your comment'

4
це має бути головна відповідь, дуже просто і включає НЕВЕРДНІ файли на відміну від більшості інших пропозицій.
JesseBoyd

6

Просто використовуйте:

git commit -m "message" .     

Зауважте "." наприкінці ... що також може бути шлях до файлу / каталогу


це буде працювати для новостворених файлів або просто існуючих, які змінені?
MasterJoe2

5

Я роблю шкаралупу

#!/bin/sh

clear

git add -A 
git commit -a -m "'$*'"

збережіть, наприклад, git.sh та пізніший дзвінок:

sh git.sh your commit message

1
не портативний для інших ОС, а git може це зробити сам, тож який сенс?
naught101

2
@ naught101 Очевидно, що git може це зробити самостійно, справа в тому, що ця оболонка служить для впорядкування процесу для людей, які використовують git на Linux, набагато простіше запустити sh git.sh ваше повідомлення про фіксацію, а не зробити портативним не означає, що він буде працювати належним чином.
ademar111190

5

У мене є ця функція в моєму .bash_profileабо .profileабо .zprofileабо що - то отримує джерела в реєстраційних оболонках:

function gac () {
  # Usage: gac [files] [message]
  # gac (git add commit) stages files specified by the first argument
  # and commits the changes with a message specified by the second argument.
  # Using quotes one can add multiple files at once: gac "file1 file2" "Message".
  git add $1 && git commit -m "$2"
}

3

Ви можете використовувати -a

git commit -h

...
Commit contents options
    -a, -all    commit all changed files
...

git commit -a # It will add all files and also will open your default text editor.

2

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

https://ohmyz.sh/

  • git add . скорочується до ga .
  • git commit -m "message" скорочується до gc -m "message"
  • git push скорочується до gp

введіть тут опис зображення


1

Я використовую наступне (обидва тривають, тому спробую пам'ятати, щоб оновити це):

# Add All and Commit
  aac = !echo "Enter commit message:" && read MSG && echo "" && echo "Status before chagnes:" && echo "======================" && git status && echo "" && echo "Adding all..." && echo "=============" && git add . && echo "" && echo "Committing..." && echo "=============" && git commit -m \"$MSG\" && echo "" && echo "New status:" && echo "===========" && git status

# Add All and Commit with bumpted Version number
  aacv = !echo "Status before chagnes:" && echo "======================" && git status && echo "" && echo "Adding all..." && echo "=============" && git add . && echo "" && echo "Committing..." && echo "=============" && git commit -m \"Bumped to version $(head -n 1 VERSION)\" && echo "" && echo "New status:" && echo "===========" && git status

З echo "Enter commit message:" && read MSG частиною, натхненною Сояном V Хосе

Я хотів би отримати там if elseзаяву, щоб я міг змусити aacv запитати мене, чи хочу я розгорнути, коли це зроблено, і робити це для мене, якщо я ввожу "y", але, мабуть, я повинен це помістити у свій .zshrcфайл


1

Я використовую наступний псевдонім для додавання всіх і здійснення :

git config --global alias.ac '!git add -A && git commit -a'

Потім, набравши:

git ac

Я отримую вікно vim, щоб отримати більше інструментів для редагування мого повідомлення про фіксацію.


Я мав би подати в суд за плагіат. :)
Navid Vafaei

Поясніть, будь ласка, різні додаткові відомості, які надає ваша відповідь у порівнянні із помітно старшою відповіддю від Navid.
Yunnosch

@Yunnosch Я думаю, я не бачив відповіді Навіда перед публікацією, оскільки він "занадто лінивий": P, щоб розмістити його як повну відповідь. Дійсно, це те саме, і насправді цей псевдонім я давно запозичив у колеги. Тому я думаю, що ми можемо назвати це: ланцюгом плагіату. Вибачте, якщо це вас турбувало.
Гас

1

У випадку, якщо хтось захоче "додати і ввести" для одного файлу, що було моєю справою, я створив сценарій внизу, щоб зробити саме це:

#!/bin/bash

function usage {
    echo "Usage: $(basename $0) <filename> <commit_message>"    
}

function die {
    declare MSG="$@"
    echo -e "$0: Error: $MSG">&2
    exit 1
}

(( "$#" == 2 )) || die "Wrong arguments.\n\n$(usage)"

FILE=$1
COMMIT_MESSAGE=$2

[ -f $FILE ] || die "File $FILE does not exist"

echo -n adding $FILE to git...
git add $FILE || die "git add $FILE has failed."
echo done

echo "commiting $file to git..."
git commit -m "$COMMIT_MESSAGE" || die "git commit has failed."

exit 0

Я назвав його "gitfile.sh" і додав його до свого $ PATH. Тоді я можу запустити git add і зробити один файл для однієї команди:

gitfile.sh /path/to/file "MY COMMIT MESSAGE"

0

Я використовую цей псевдонім git:

git config --global alias.cam '!git commit -a -m '

Тож замість дзвінка

git add -A && git commit -m "this is a great commit"

Я просто роблю:

git cam "this is a great commit"


0

ви можете використовувати git commit -am "[коментар]" // найкраще рішення або git add. && git commit -m "[коментар]"


0

Спершу перевірте, які у вас псевдоніми ...

git config --get-regexp alias

Якщо його немає, ви можете створити власну (довідка: https://git-scm.com/book/en/v2/Git-Basics-Git-Aliases )

// git add

git config --global alias.a '!git add -A'

// git commit

git config --global alias.c '!git commit'

// git commit -m

git config --global alias.cm '!git commit -m'

// git add commit

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

// git add commit -m

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

Наприклад, якщо ви використовуєте останній ...

git acm 'My commit'

0
  1. Створіть псевдонім у bash: alias gac="git add -A && git commit -m"

    (Я вирішив назвати ярлик "gac", але не потрібно)

  2. Використай це: gac 'your commit message here'


0

Для срібних спинок у натовпі, які звикли до таких речей, як Subversion ... робити "фіксацію" у старому сенсі цього слова (тобто - або в git speak - додавати, здійснювати та натискати) у Один крок я зазвичай додаю щось подібне до цього у корінь свого проекту (як bat-файл у Windows, наприклад, git-commit.bat). Тоді, коли я хочу додавати, виконувати чи натискати, я просто набираю щось на кшталтgit-commit "Added some new stuff" і все переходить до віддаленого репо.

Крім того, таким чином будь-хто в проекті може використовувати те саме, що не потрібно міняти що-небудь локально.

Зазвичай я також запускаю git config credential.helper storeодин раз, тому мені не потрібно давати uid / pwd, коли це виконується.

::
:: add, commit, and push to git
::

@echo off
echo.
echo.
echo 
echo Doing commit...
git add -A && git commit -m %1
echo.
echo.
echo Doing push...
git push
echo.
echo.
echo Done.
echo.

0

Для мене це працює завжди, будь ласка, виконайте такі команди:

1.git add .
2.git commit -m "no bugs please"
3.git push origin *

де * базується на тій гілці, на яку ви підштовхуєтесь, а також виконувати повідомлення завжди можна змінити відповідно до контексту.


-1
  1. введіть git add . && git commit -amі введіть
  2. введіть historyі введіть
  3. запам'ятайте число для вищевказаної команди, скажімо, число 543
  4. Відтепер для кожного типу введення, !543 "your comment here"тобто знаку оклику + номер та пробіл та ваш коментар.

4
Я прихильнився, тому що це дійсно дивне рішення, яке може зламати речі жахливими способами, як тільки закінчиться ваша історія, і 543-а команда стає чимось іншим.
bfontaine


-4

Щоб зберегти його в одному рядку, використовуйте:

gacm "your comment"

2
Чи можете ви надати певну інформацію про це, або посилання чи щось таке?
Гершом

7
Я думаю, що цей плакат працює з псевдонімами і не усвідомлює цього. Щоб зробити вищезгадану роботу, ви хочете додати псевдонім оболонки на зразок alias gacm="git add .; git commit -m"або (бажано, думаю,) псевдонім git, як git config --global alias.gacm '!git add .;git commit -m'.
Просто розвиток
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.