git додавати, виконувати та натискати команди в одній?


220

Чи є спосіб використовувати ці три команди в одній?

git add .
git commit -a -m "commit" (do not need commit message either)
git push

Іноді я змінюю лише одну букву, вкладку CSS чи щось таке. І все-таки мені потрібно написати всі три команди, щоб підштовхнути зміни. Є багато проектів, де я лише один штовхач, тому ця команда була б приголомшливою!


10
Ви спробували написати сценарій оболонки?
Пол


У моєму коді дуже багато змін, коли ви змінюєте лише вкладку в css, або одну букву і т.д. Не випробували сценарій оболонки. Як це можна зробити? Дякую!
Гедимін

2
"(не потрібно також повідомлення про фіксацію)" images.wikia.com/dragonball/images/a/a7/Facepalm_227785.jpg
Ajedi32,

2
якщо ви здійснюєте вчинення для кожного окремого випадку зміни, ви робите це неправильно. виконайте команди, коли функція закінчена або помилка вирішена (це може бути одна зміна)
Марк

Відповіді:


236

Побудова відповіді @ Гавіна:

Зробити функцію lazygit замість псевдоніму можна передати їй аргумент. Я додав у свій .bashrc (або .bash_profile, якщо Mac):

function lazygit() {
    git add .
    git commit -a -m "$1"
    git push
}

Це дозволяє надати повідомлення про фіксацію, наприклад,

lazygit "My commit msg"

Ви, звичайно, можете ще більше пом'якшити це, прийнявши ще більше аргументів, наприклад, у яке віддалене місце, куди слід підштовхнути, чи до якої гілки.


11
Перезапуск не потрібен, просто виконайте "source .bashrc"
Sambit Tripathy

25
міг використовувати $*замість того, $1щоб зберегти набравши цитати:lazygit My commit msg
Кай Карвер

16
@KaiCarver Приємна думка, але особисто мені це не подобається. Це заважає використовувати декілька аргументів, а також суперечить нормальній умовності одного аргументу рядка з пробілами, загорнувшись у лапки. На даний момент це для мене друга природа (і я би припустив, що багато розробників). Покинувши цитати, ви відчуваєте себе брудними.
бце

6
lazygit, найкраще ім’я коли-небудь!
користувач1447414

4
@btse мене дипломатичною особою + це п’ятниця. Ось функція з використанням пропозиції @KaiCarver: function dirtygit() { git add . git commit -a -m "$*" git push }
OnklMaps

84

Я врешті додав псевдонім до свого .gitconfig файл:

[alias]
    cmp = "!f() { git add -A && git commit -m \"$@\" && git push; }; f"

Використання: git cmp "Long commit message goes here"

Додає всі файли, потім використовує коментар для повідомлення про фіксацію та підштовхує його до початку.

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

Псевдонім можна також визначити з командного рядка, це додасть його до вашого .gitconfig:

git config --global alias.cmp '!f() { git add -A && git commit -m "$@" && git push; }; f'

6
Це саме те, що я шукав! Працює чудово, дякую! Не вдалося знайти повної посилання на синтаксис або детальний список команд. Що !f() { ... }; fсаме робить ? Більше пояснення цього рядка зробить відповідь ще кращою.
Дмитро Гамолін

1
@DmitriyDemir Він визначає функцію f, а потім викликає її.
Олівер

Працює дуже добре. Я додав git pullдо початку, щоб злиття зменшилися.
Бурхан

1
@Oliver Чому це в лапках? Чому виникає знак оклику? Чи називає f в кінці функцією? Що таке "$ @"?
Філіп Рего

@PhilipRego Неправильний Олівер: p
Олівер

53

Хоча я погоджуюся з Вейном Вернером щодо його сумнівів, технічно це варіант:

git config alias.acp '! git commit -a -m "commit" && git push'

Який визначає псевдонім, який працює commitі push. Використовуйте його як git acp. Зауважте, що такі псевдоніми «оболонки» завжди запускаються з кореня вашого сховища git.

Іншим варіантом може бути написання гачка після фіксації, який робить натиск.

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

git config alias.acp '! acp() { git commit -a -m "$1" && git push ; } ; acp'

(Звичайно, зараз, вам потрібно буде дати Комміт повідомлення: git acp "My message goes here!")


@wlz Я просто спробував це, і він працює чудово. Зауважте, що весь рядок знаходиться всередині одиничних лапок. gitавтоматично додав евакуації (перевірено git config -e).
Тільман Фогель

Вибачте, ви праві :). Я безпосередньо редагую файл .gitconfig. Поле "вже втекло з \".
wlz

2
Чому це не прийнята відповідь? Це робить те, що просили. +1.
lucid_dreamer

1
У Windows мені потрібно було уникнути подвійних котирувань близько 1 долара, щоб змусити його працювати від PowerShell (використовуючи ... \ "$ 1 \" ...)
DReimer

35

Я думаю, ви можете неправильно зрозуміти робочий процес, для якого створений git. (Щоб уточнити / виправити, що я мав на увазі в коментарі, вам це не потрібно git add ., оскількиcommit -a зазвичай служить тій самій цілі - додавання будь-яких змін, які ще не були поставлені, якщо файли вже додані)

Зазвичай ви робите щось подібне:

# make some changes
$ git commit -a -m "Changed something"
# make some more changes
$ git commit -a -m "Changed something else"

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

$ git push

Git - це не SVN - але, здається, ви намагаєтесь використовувати його як такий. Деякі ресурси в кінці статті ви можете знайти тут .


6
+1 для пояснення щодо робочого процесу. Однак git add .і git commit -a не те саме
Габріеле Петронелла

5
Дякую за пояснення, але GIT не розвалиться, якщо буде така команда для тих, хто знає, що вони роблять ...
Gediminas

4
@Lucas: Досвідчені програмісти скажуть вам, що люди, які запитують автоматичну команду "натиснути", не знають, що вони роблять. Існує причина для 3-ступінчастої реєстрації коду (якщо ви використовуєте гілки функцій, 4-ступінчасті).
slebetman

1
@slebetman: Я не пояснив це правильно. За допомогою програм facebook кожна зміна повинна бути розгорнута на живий сервер навіть для розвитку. Отже, у нас є налаштування здійснювати гачки для цього. Ви внесете зміни, вчините їх і побачите зміни у вашому додатку. З git, мені потрібно додати, етап, потім натиснути його, щоб побачити єдину зміну. Це не виглядає зайвим?
SenG

1
Так, але вам також не потрібно брати на себе перевірку свого коду. Ви повинні написати якийсь код, протестувати його, а потім зробити і натиснути. Легендарне використання локальних git зобов’язується надати певну функцію "скасування" багатофайлових файлів, що в легенді використовується набагато більше, ніж насправді, як насправді.
Джо Строут

35

Я використовую це у своєму .bash_profile

gitpush() {
    git add .
    git commit -m "$*"
    git push
}
alias gp=gitpush

Це виконує як

gp A really long commit message

Не забудьте запуститись source ~/.bash_profileпісля збереження псевдоніма.


1
Мені це дуже подобається. ... і тому прийняли його у свій ~ / .bash_profile;) дякую .. +1
AO_

28

Ви можете використовувати скрипт bash, встановити псевдонім для запуску будь-якої команди або групи команд

git commit -am "your message" && git push 

2
Якщо ви хочете зробити цю відповідь, будь ласка, додайте більше коментарів щодо того, як це працює. Відповіді, які є просто скидом коду, як правило, недостатньо добре отримані. Дивіться, як відповісти .
Єретична мавпа

Я думаю, це має бути правильною відповіддю. Як це відповідає на питання якомога коротше. Просто введіть його в термінал, і він працює! Якщо ви не хочете додати псевдонім, альтернативою буде просто створити розширення textExpander і запустити його за допомогою комбінації клавіш.
еоніст

19

Встановіть псевдонім у bash:

$ alias lazygit="git add .; git commit -a -m '...'; git push;";

Назви це:

$ lazygit

(Щоб зробити цей псевдонім постійним, вам потрібно буде включити його у свій .bashrc або .bash_profile)


Вам потрібно буде додати цей псевдонім до .bashrc або .bash_profile, щоб зробити його постійним
Gavin

Я думаю, що ця сторінка може допомогти пояснити: serverfault.com/questions/3743/…
Гавін

17

Найпростішим рішенням було б:

git commit -a -m "commit" && git push

git add вже міститься в -a параметрі фіксації, але якщо ви хочете, ви можете їх з'єднати всі:

git add . && git commit -a -m "commit" && git push

10

В Linux / Mac цей практичний варіант також повинен працювати

git commit -am "IssueNumberIAmWorkingOn --hit Enter key
> A detail here --Enter
> Another detail here --Enter
> Third line here" && git push --last Enter and it will be there

Якщо ви працюєте над новою гілкою, створеною локально, змінітьgit push фрагмент наgit push -u origin branch_name

Якщо ви хочете відредагувати своє повідомлення про фіксацію в системному редакторі, тоді

git commit -a && git push 

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


8

Можна спробувати гіту .

Вперше (вузол js має бути встановлений):

npm install -g git-upload

Після того:

gitu COMMIT_MSG

Видати ці три команди одразу.

Хороша річ у тому, що вам не доведеться хвилюватися під час перевстановлення системи або коли ви хочете зробити це на різних комп’ютерах, і жодна модифікація файлів не потрібна. Це також працює на різних платформах (не тільки Linux і Mac, але і Windows під командним рядком, як cmdі powershell), тільки що вам доведеться встановити npmі nodejs( gitзвичайно).


6

Якщо файл вже відслідковується, запускати його не потрібно git add, можна просто написатиgit commit -am 'your message'

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

git commit --allow-empty-message -am ''



3

Як згадується у цій відповіді, ви можете створити псевдонім git і призначити набір команд для нього. У цьому випадку це було б:

git config --global alias.add-com-push '!git add . && git commit -a -m "commit" && git push'

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

git add-com-push

1
Це не додає нічого до жодної попередньої відповіді.
BanksySan

Вибачте, ви праві. Думаю, я не помітив, що відповідь Тільмана Фогеля була такою ж, як і моя. Чи слід її видалити ??
cristianzamar

3

Напишіть невеликий сценарій під назвою gitpush.sh із рядками нижче та додайте до нього свою ~ каталог.

echo $1
git add .
git commit -m "$1"
git push

Тепер додайте псевдонім у ~ / .bashrc, як показано нижче:

alias gitpush='~/gitpush'

Тепер з будь-якого git-сховища просто напишіть gitpush "message".


2

Я використовую пакетний файл:

@ECHO OFF
SET /p comment=Comment:
git add *
git commit -a -m "%comment%"
git push

probs буде простіше, якби ви прийняли аргументи з командного рядка. я просто йду "lezygit ПОВІДОМЛЕННЯ" і т. д. це досить круто!
Джон Гон

1

Є кілька проблем зі сценаріями вище:

shift "видаляє" параметр $ 1, інакше "push" прочитає його і "неправильно зрозуміє".

Моя порада:

git config --global alias.acpp '! git add -A && branchatu = "$ (git symbolic-ref HEAD 2> / dev / null)" && branchatu = $ {branchatu ## refs / heads /} && git commit - m "$ 1" && shift && git pull -u походження $ branchatu && git push -u походження $ branchatu '


1

Коли ви хочете, щоб поведінка git počin була схожа на svn, використовуйте це у своїх псевдонімах git у своєму .gitconfig

commit = "!f() { git commit \"$@\" && git push; };f"


1

Якщо ви використовуєте рибну шкаралупу (будуючи відповідь btse):

Збережіть цей файл у "~ / .config / fish / function" як "quickgit.fish". Створіть каталог, якщо він не існує. '--git-dir = $ PWD / .git' Забезпечує виконання команд git проти проекту git, де ми викликали функцію

function quickgit # This is the function name and command we call
    git --git-dir=$PWD/.git add . # Stage all unstaged files
    git --git-dir=$PWD/.git commit -a -m $argv # Commit files with the given argument as the commit message
    git --git-dir=$PWD/.git push # Push to remote
end

Перезапустіть термінал, перейдіть до проекту, внесіть зміни, і тепер ви можете зателефонувати "quickgit" приклад повідомлення "'. Зміни тепер будуть додані, здійснені та натиснуті :).

Також можна знайти тут як Gist тут: https://gist.github.com/Abushawish/3440a6087c212bd67ce1e93f8d283a69


1

Вже є маса хороших рішень, але ось рішення, яке я вважаю більш елегантним для того, як я хочу працювати:

Я ставлю на своєму шляху сценарій під назвою "git-put", який містить:

#!/bin/bash
git commit "$@" && git push -u

Це дозволяє мені запустити:

git put -am "моє повідомлення про вчинення"

..додати всі файли, зробити їх і натиснути.

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

Мені подобається такий підхід, тому що він також дозволяє використовувати "git put" без додавання всіх файлів (пропустити "-a"), або з будь-якими іншими параметрами, які я, можливо, захочу передати на фіксацію. Також "put" - це короткий портманто "push" та "привернути"


1

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


1

Якщо ви використовуєте Mac:

  1. Запустіть термінал Введіть "cd ~ /", щоб перейти до домашньої папки

  2. Введіть "touch .bash_profile", щоб створити новий файл.

  3. Відредагуйте .bash_profile улюбленим редактором (або просто введіть "open -e .bash_profile", щоб відкрити його в TextEdit).

  4. Скопіюйте та вставте нижче у файл:

function lazygit() {
    git add .
    git commit -a -m "$1"
    git push
}

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

lazygit "This is my commit message"

1

Для користувачів MAC VSC найкраща установка:

1) натисніть 'shift + cmd + P' та введіть:

Shell Command: install 'code' command in PATH

Натисніть ENTER (для цього буде встановлена ​​команда коду, щоб легко дістатися до bash_profile)

2) тепер можна запустити: code ~/.bash_profile відкрити порожній файл bash_profile

3) введіть туди нову функцію:

function lazygit() {
    git add .
    git commit -m "$*"
    git push
}

4) тепер перезапустіть VSC

5) внесіть зміни, збережіть її та введіть lazygit messageдля виконання трьох команд одночасно


1

Для користувачів macOS:

  1. Відкрийте свій термінал або iTerm2 або інший термінал, який ви використовуєте.

  2. Перейдіть до папки профілю користувача з командою ~/. Це папка за замовчуванням для .bash_profileфайлу:

Приклад папки користувача

  1. Тип nano .bash_profileЦя команда відкриє .bash_profileдокумент (або створить його, якщо його ще не існує) у найпростішому у використанні текстовому редакторі для терміналу - nano.

  2. Тепер ви можете внести просту зміну у файл. Вставте ці рядки коду, щоб змінити підказку про термінал:

function lazygit() {
    git add .
    git commit -a -m "$1"
    git push
}

Нано редагування тексту

  1. Тепер збережіть зміни, ввівши ctrl + oта натисніть кнопку return, щоб зберегти. Потім вийдіть nano, набравши текст ctrl + x.

  2. Тепер нам потрібно активувати ваші зміни. Введіть source .bash_profile(або . ~/.bash_profile) і перегляньте своє швидке зміна.

  3. В iTerm2 Preferences/Profiles/General/Commandвстановлено в Login Shellі Send text at startдо source ~/.bash_profile. Тому вам не потрібно робити це вручну після кожного перезавантаження macOS. Налаштування iTerm 2

Повноважні дані: https://natelandau.com/my-mac-osx-bash_profile


0

Я зробив це .sh скрипт для команди

#!/bin/sh
cd LOCALDIRECTORYNAME/  
git config --global user.email "YOURMAILADDRESS"
git config --global user.name "YOURUSERNAME"
git init
git status
git add -A && git commit -m "MASSAGEFORCOMMITS"
git push origin master

0

Оскільки в питанні не вказано, яка оболонка, ось ешел-версія, заснована на попередніх відповідях. Це йде у файлі псевдоніма eshell, який може бути у ~ / .emacs.d / eshell / alias Я додав першу частину z https://github.com/rupa/z/, яка дозволить вам швидко перейти в каталог , так що це може бути запущено незалежно від поточної каталогу.

alias census z cens; git add .; git commit -m "fast"; git push

0

Додати ~/.bash_profileдля додавання, виконання та натискання однією командою:

function g() { git commit -a -m "$*"; git push; }

Використання:

g your commit message
g your commit message 'message'

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

g "your commit message; (message)"

Щоб створити коментар у своєму повідомленні, зробіть:

g "your commit message:
> your note"

Існує також функція додавання та здійснення аналогічним чином:

function c() { git add --all; git commit -m "$*"; }

Працює точно так само, як gфункціонує та має однакові обмеження. Просто поставте cзамість цього. Напр

c your commit message

Ви також можете додати псевдонім для натискання на пульт:

alias p='git push'

Використання:

p

Це становить в 2 -х букв, cі pви використовуєте при роботі з репозиторієм мерзотника. Або ви можете gзамість цього зробити все лише однією буквою.

Повний список псевдонімів та функцій: https://gist.github.com/matt360/0c5765d6f0579a5aa74641bc47ae50ac


0

Виходячи з lazygitвідповіді, наступне рішення додає перевірку користувача, щоб перевірити зміни перед натисканням. Якщо вони скасовані, вони відновлять команди. І все це відбудеться, якщо і лише за наявності змін у місцевому репо.

### SAFER LAZY GIT
function lazygit() {
  git add .
  if git commit -a -m "$1"; then
    read -r -p "Are you sure you want to push these changes? [y/N]} " response
    case "$response" in
      [yY][eE][sS]|[yY])
        git push
        ;;
      *)
        git reset HEAD~1 --soft
        echo "Reverted changes."
        ;;
    esac
  fi
}

0

Це ідеально підходить для групування команд.

Групування команд

{список; } Розміщення списку команд між фігурними дужками призводить до виконання списку в поточному контексті оболонки. Не створено підкашлю. Наступний список з комою (або новим рядком) обов'язковий.

legit(){ git add --all; git commit -m "$1"; git push origin master; }
legit 'your commit message here'

1
Це не спрацює, якщо в повідомленні комісії є пробіли між ними
Rohit

0

Мені подобається запускати наступне:

git commit -am "message";git push

Я думаю, що ;слід замінити &&у вашій команді, оскільки пізніша виконує git pushкоманду лише у тому випадку, якщо в попередній команді немає помилок.
Том

0

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

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