git add, commit и push команды в одном?

220

Есть ли способ использовать эти три команды в одной?

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

Иногда я меняю только одну букву, CSS-отступ или что-то в этом роде. Тем не менее, я должен написать все три команды, чтобы подтолкнуть изменения. Есть много проектов, в которых я всего лишь один толкач, поэтому эта команда будет потрясающей!

Гедиминас
источник
11
Вы пытались написать сценарий оболочки?
Пол
В моем коде много изменений, когда вы меняете только заполнение в css, или одну букву и т. Д. Фиксация сообщений и все эти команды добавляет много работы. Не пробовал скрипт оболочки. Как это можно сделать? Спасибо!
Гедиминас
2
"(также не нужно коммитить
Ajedi32
2
Если вы делаете коммит для каждого отдельного изменения, вы делаете это неправильно. выполните команду, когда ваша функция закончена или ошибка устранена (это может быть одно изменение)
Марк

Ответы:

236

Построение ответа @ Гэвина:

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

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

Это позволяет вам предоставить сообщение фиксации, такое как

lazygit "My commit msg"

Конечно, вы могли бы усилить это еще больше, приняв еще больше аргументов, например, в какое удаленное место нажать или в какую ветку.

БТСЭ
источник
12
Перезапуск не нужен, просто сделайте «source .bashrc»
Sambit Tripathy
25
можно использовать $*вместо того, $1чтобы сохранить набрав цитаты:lazygit My commit msg
Кай Карвер
16
@KaiCarver Хорошая мысль, но лично мне это не нравится. Он не позволяет использовать несколько аргументов, а также противоречит обычному соглашению, заключенному в одну строковую аргумента с пробелами, заключенными в кавычки. Это вторая натура для меня на данный момент (и я бы предположил, много разработчиков). Оставляя цитаты, кажется грязным.
2012 г.
6
lazygit, лучшее имя когда-либо!
user1447414
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'
madcapacity
источник
6
Это именно то, что я искал! Работает отлично, спасибо! Я не смог найти полную ссылку на синтаксис или подробный список команд. Что именно делает !f() { ... }; f? Более подробное объяснение этой строки сделало бы ответ еще лучше.
Дмитрий Гамолин
1
@DmitriyDemir Определяет функцию f, затем вызывает ее.
Оливер
Работает действительно хорошо. Я добавил git pullв начало, чтобы слияния были уменьшены.
Бурхан
1
@ Оливер Почему это в кавычках? Почему восклицательный знак? F в конце вызывает функцию? Что такое "$ @"?
Филипп Рего
@PhilipRego Неправильный Оливер: p
Оливер
53

Хотя я согласен с Уэйном Вернером в его сомнениях, технически это вариант:

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

Который определяет псевдоним, который работает commitи push. Используйте это как git acp. Помните, что такие псевдонимы «shell» всегда запускаются из корня вашего git-репозитория.

Другой вариант может заключаться в написании хука post-commit, который выполняет push.

О, кстати, вы действительно можете передавать аргументы псевдонимам оболочки. Если вы хотите передать пользовательское сообщение о коммите, вместо этого используйте:

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 не рухнет, если будет такая команда для тех, кто знает, что они делают ...
Гедиминас
4
@Lucas: Опытные программисты скажут вам, что люди, которые просят автоматическую команду commit-push, не знают, что они делают. Есть причина для 3-этапной проверки кода (если вы используете ветки функций, 4-этапные).
Slebetman
1
@ Slebetman: Я не объяснил это правильно. В приложениях Facebook каждое изменение должно быть развернуто на действующем сервере даже для разработки. Итак, мы установили хуки коммитов для этого. Вы вносите изменения, фиксируете их и видите изменения в своем приложении. Мне нужно добавить git, stage, затем нажать его, чтобы увидеть одно изменение. Разве это не выглядит излишним?
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_
1
Это прекрасно работает! Вы будете запускать «сообщение gp»
XIAOLONG LI
28

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

git commit -am "your message" && git push 
vuhung3990
источник
2
Если вы хотите дать ответ, пожалуйста, добавьте больше комментариев о том, как это работает. Ответы, которые являются просто дампом кода, обычно не принимаются хорошо. Смотрите как ответить .
Еретик Обезьяна
Я думаю, что это должен быть правильный ответ. Как это ответить на вопрос как можно более кратко. Просто введите его в терминал, и он работает! Если вы не хотите добавлять псевдоним, альтернативой было бы просто создать расширение textExpander и запустить его с помощью комбинации клавиш.
eonist
19

Установить как псевдоним в bash:

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

Назови это:

$ lazygit

(Чтобы сделать этот псевдоним постоянным, вам нужно включить его в ваш .bashrc или .bash_profile)

Gavin
источник
Вам нужно было бы добавить этот псевдоним в .bashrc или .bash_profile, чтобы сделать его постоянным
Гэвин
Я думаю, что эта страница может помочь объяснить: serverfault.com/questions/3743/…
Гэвин
17

Самое простое решение:

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

git add уже содержится в параметре commit, но при желании вы можете подключить их все:

git add . && git commit -a -m "commit" && git push
michal.jakubeczy
источник
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 

откроет редактор, и как только вы сохраните сообщение, оно также будет отправлено.

mcvkr
источник
8

Вы можете попробовать Gitu .

В первый раз (должен быть установлен узел js):

npm install -g git-upload

После этого:

gitu COMMIT_MSG

Чтобы выпустить эти три команды одновременно.

Хорошо, что вам не нужно беспокоиться, когда вы переустанавливаете свою систему или когда вы хотите сделать это на разных компьютерах, и никаких изменений файлов не требуется. Это также работает на разных платформах (не только Linux и Mac, но и Windows в командной строке, как cmdи powershell), просто, что вы должны установить npmи nodejs( gitконечно).

Fries
источник
6

Если файл уже отслеживается, вам не нужно запускать git add, вы можете просто написатьgit commit -am 'your message'

Если вы не хотите писать коммит, вы можете подумать о том, чтобы сделать что-то вроде

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

Питер Фоти
источник
4

Этот результат - Попробуйте это: Простой скрипт одна команда для git add, git commit и git push

Откройте свой CMD в Windows и вставьте этот ответ

git commit -m "your message" . && git push origin master

Вот пример моего снимка экрана: https://i.stack.imgur.com/2IZDe.jpg

Ананг Ханафи
источник
3

Как упоминалось в этом ответе, вы можете создать псевдоним git и назначить для него набор команд. В этом случае это будет:

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

и использовать его с

git add-com-push
cristianzamar
источник
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
Марсио Соуза Хуниор
источник
Было бы проще, если бы вы приняли аргументы из командной строки. я просто говорю "ЛЕЗЫГИТ СООБЩЕНИЕ" и т. д. это довольно круто!
Джон Хон,
1

Есть некоторые проблемы со сценариями выше:

shift «удаляет» параметр $ 1, в противном случае «push» прочтет его и «неправильно поймет».

Мой совет:

git config --global alias.acpp '! git add -A && branchatu = "$ (git symbolic-ref HEAD 2> / dev / null)" && branchatu = $ {branchatu ## refs /глав /} && git commit - m "$ 1" && shift && git pull -u origin $ branchatu && git push -u origin $ branchatu '

Рубенс
источник
1

Если вы хотите svn-подобное поведение git commit, используйте это в псевдонимах git в вашем .gitconfig

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

Рик ван дер Хейден
источник
1

Если вы используете рыбную раковину (основываясь на ответе btse):

Сохраните этот файл в ~ ~ .config / fish / functions как 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» пример сообщения ». Изменения теперь будут добавлены, зафиксированы и отправлены :).

Также можно найти в Гисте здесь: https://gist.github.com/Abushawish/3440a6087c212bd67ce1e93f8d283a69

Abushawish
источник
1

Уже есть много хороших решений, но вот решение, которое я считаю более элегантным для того, как я хочу работать:

Я поместил в свой путь скрипт под названием «git-put», который содержит:

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

Это позволяет мне бежать:

git put -am "мое сообщение коммита"

..добавить все файлы, зафиксировать их и отправить их.

(Я также добавил «-u», потому что мне все равно нравится это делать, хотя это не связано с этой проблемой. Это гарантирует, что ветвь вверх по течению всегда настроена для вытягивания.)

Мне нравится этот подход, потому что он также позволяет использовать «git put», не добавляя все файлы (пропустите «-a»), или с любыми другими опциями, которые я мог бы хотеть передать для фиксации. Кроме того, «put» - это краткое название «push» и «commit»

skiggety
источник
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"
AdilOoze
источник
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для одновременного запуска трех команд

AGrush
источник
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

rusakovic
источник
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, основанная на предыдущих ответах. Это идет в файле псевдонима eshell, который может быть в ~ / .emacs.d / eshell / alias. Я добавил первую часть z https://github.com/rupa/z/, которая позволит вам быстро перейти в каталог cd , так что это можно запустить независимо от того, какой у вас текущий каталог.

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'
Gothburz
источник
1
Это не будет работать, если в сообщении коммита есть пробелы
Rohit
0

Мне нравится запускать следующее:

git commit -am "message";git push
etoxin
источник
Я думаю, что ;следует заменить &&в вашей команде, так как позже будет выполнять git pushкоманду, только если нет ошибок в предыдущей команде (ях).
Том
0

Я обнаружил, что этот yolo псевдоним удивителен, даже когда я посылаю случайный комментарий в коммит, пока я ленивый. Он работает очень хорошо из коробки, так что я просто делаю, git yoloи все мои изменения переносятся автоматически.

jamescampbell
источник