git add, commit 및 push 명령을 하나로?


220

이 세 가지 명령을 하나로 사용할 수있는 방법이 있습니까?

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

때로는 하나의 문자, CSS 패딩 또는 무언가 만 변경하고 있습니다. 여전히 변경 사항을 적용하려면 세 가지 명령을 모두 작성해야합니다. 내가 하나의 푸셔 인 많은 프로젝트가 있으므로이 명령은 훌륭합니다!


10
쉘 스크립트를 작성해 보셨습니까?
Paul


CSS의 패딩이나 하나의 문자 등을 변경하면 내 코드에 많은 변경 사항이 있습니다. 메시지를 커밋하면 이러한 모든 명령이 많은 작업을 추가합니다. 쉘 스크립트를 시도하지 않았습니다. 어떻게 할 수 있습니까? 감사!
Gediminas


2
변경의 모든 단일 인스턴스에 대해 커밋을 수행하는 경우 잘못 수행 한 것입니다. 기능이 완료되거나 버그가 해결되면 명령을 수행하십시오 (단일 변경 일 수 있음)
Mark

답변:


236

@Gavin의 답변을 바탕으로 :

별명 대신 lazygit을 함수로 만들면 인수를 전달할 수 있습니다. 내 .bashrc (또는 Mac의 경우 .bash_profile)에 다음을 추가했습니다.

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
Kai Carver

16
@KaiCarver 좋은 생각이지만 개인적으로 나는 그것을 좋아하지 않습니다. 여러 인수를 사용하지 못하게하고 공백으로 따옴표로 묶인 단일 문자열 인수의 일반적인 규칙에 위배됩니다. 이 시점에서 이것은 두 번째 본성입니다 (그리고 많은 개발자를 가정 할 것입니다). 따옴표를 남기면 더러워집니다.
btse

6
게으른, 최고의 이름!
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'

6
그것이 바로 내가 찾던 것입니다! 완벽하게 작동합니다. 감사합니다! 전체 구문 참조 또는 자세한 명령 목록을 찾을 수 없습니다. 무엇 않습니다 !f() { ... }; f정확히 무엇입니까? 그 줄에 대한 자세한 설명은 대답을 더 좋게 만듭니다.
Dmitriy Gamolin

1
@DmitriyDemir 함수를 정의한 f다음 호출합니다.
Oliver

정말 잘 작동합니다. git pull병합을 줄이기 위해 시작 부분에 추가 했습니다.
Burhan

1
@Oliver 왜 따옴표 안에 있습니까? 느낌표가있는 이유는 무엇입니까? 끝에있는 f가 함수를 호출합니까? "$ @"는 무엇입니까?
Philip Rego

@PhilipRego 잘못된 올리버 : P
올리버

53

웨인 베르너 (Wayne Werner)는 그의 의구심에 대해 동의하지만 이것은 기술적으로 선택 사항입니다

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).
Tilman Vogel

죄송합니다, 당신이 맞습니다 :). .gitconfig 파일을 직접 편집합니다. "는 이미 \로 이스케이프되었습니다."
wlz

2
이것이 왜 대답이 맞지 않습니까? 요청한 내용을 수행합니다. +1.
lucid_dreamer

1
Windows에서는 PowerShell에서 작동하도록하려면 $ 1 주위의 큰 따옴표를 피해야했습니다 (... \ "$ 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 같은 것이 아니다
가브리엘 Petronella

5
설명 주셔서 감사합니다,하지만 그들이 무슨 일을 알고 사람들을 위해 이런 명령이있을 경우 GIT 붕괴되지 않습니다 ...
Gediminas

4
@Lucas : 숙련 된 프로그래머가 자동 커밋-푸시 명령을 요청하는 사람들은 자신이하는 일을 모른다고 말합니다. 3 단계 코드 체크인의 이유가 있습니다 (기능 분기를 사용하는 경우 4 단계).
slebetman

1
@ slebetman : 나는 그것을 올바르게 설명하지 않았다. 페이스 북 앱을 사용하면 개발할 때마다 모든 변경 사항을 라이브 서버에 배포해야합니다. 이를 위해 커밋 후크를 설정했습니다. 변경을 수행하고 커밋하고 앱에서 변경 사항을 확인하십시오. git을 사용하여 추가하고 준비한 다음 밀어서 단일 변경 사항을 확인해야합니다. 과잉으로 보이지 않습니까?
SenG

1
예,하지만 코드를 테스트하기 위해 커밋 할 필요는 없습니다. 코드를 작성하고 테스트 한 다음 커밋하고 푸시해야합니다. 로컬 git 커밋의 전설적인 사용은 일종의 다중 파일 "실행 취소"기능을 제공하기 위해 실제 경험보다 전설에서 훨씬 더 많이 사용됩니다.
Joe Strout

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 script를 사용하고 alias를 설정하여 모든 명령 또는 명령 그룹을 시작할 수 있습니다

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

2
이 답변을 원한다면 작동 방식에 대해 더 많은 논평을 추가하십시오. 단순히 코드 덤프 인 답변은 일반적으로 제대로 수신되지 않습니다. 답변 방법을 참조하십시오 .
Heretic Monkey

나는 이것이 정답이어야한다고 생각합니다. 가능한 한 간결하게 질문에 대답합니다. 터미널에 입력하면 작동합니다! 별명을 추가하지 않으려면 textExpander 확장을 작성하고 키 조합을 통해 트리거하는 것이 대안입니다.
eonist

19

bash에서 별명으로 설정하십시오.

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

불러라:

$ lazygit

이 별칭을 영구적으로 만들려면 .bashrc 또는 .bash_profile에 별칭을 포함시켜야합니다.


이 별칭을 .bashrc 또는 .bash_profile에 추가하여 영구적으로 만들 수 있습니다.
Gavin

이 페이지가 설명하는 데 도움이 될 것 같습니다 : serverfault.com/questions/3743/…
Gavin

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

당신은 gitu 를 시도 할 수 있습니다 .

처음으로 (노드 js를 설치해야 함) :

npm install -g git-upload

그 후 :

gitu COMMIT_MSG

이 세 명령을 한 번에 발행합니다.

좋은 점은 시스템을 다시 설치할 때 또는 다른 컴퓨터에서이 작업을 수행하려고 할 때 걱정할 필요가 없으며 파일을 수정할 필요가 없다는 것입니다 . 이 또한의 다른 플랫폼에서 작동 (같은 프롬프트 명령에서뿐만 아니라 리눅스와 맥뿐만 아니라 윈도우 cmdpowershell설치해야 그냥) npmnodejs( 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

죄송합니다, 당신 말이 맞아요 나는 Tilman Vogel의 답변이 내 것과 동일하다는 것을 알지 못했다고 생각합니다 .. 삭제해야합니까 ??
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

명령 행에서 args를 수락하면 probs가 더 쉬울 것입니다. 나는 단순히 "lezygit MESSAGE"등 아주 멋지다!
John Hon

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 origin $ branchatu && git push -u origin $ branchatu '


1

svn과 같은 git commit 동작을 원할 때 이것을 .gitconfig의 git aliases에서 사용하십시오.

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 "example message"를 호출 할 수 있습니다. 변경 사항이 추가, 커밋 및 푸시됩니다 :).

또한 여기에서 요점으로 찾을 수 있습니다 : https://gist.github.com/Abushawish/3440a6087c212bd67ce1e93f8d283a69


1

이미 좋은 솔루션이 많이 있지만 여기에 내가 일하고 싶은 방식으로 더 우아하게 생각되는 솔루션이 있습니다.

"git-put"이라는 경로에 다음을 포함하는 스크립트를 넣었습니다.

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

그것은 나를 실행할 수있게합니다 :

git put -am "내 커밋 메시지"

.. 모든 파일을 추가하고 커밋 한 다음 푸시합니다.

(이 문제와 관련이 없더라도 어쨌든이 작업을 좋아하기 때문에 "-u"를 추가했습니다. 업스트림 브랜치가 항상 당겨 지도록 설정되어 있습니다.)

이 방법은 모든 파일을 추가하지 않고 ( "-a"건너 뛰기) 또는 커밋하기 위해 전달할 다른 옵션과 함께 "git put"을 사용할 수 있기 때문에이 방법이 마음에 듭니다. 또한 "put"은 "push"및 "commit"의 짧은 포트만입니다.


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. Type 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 ShellSend 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에있을 수있는 eshell 별칭 파일로 이동합니다. 첫 번째 부분 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지며 pgit 저장소로 작업하는 동안 사용합니다. 또는 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
Tom

0

내가 찾은 yolo 내가 게으른하고있는 동안 커밋에 심지어 임의의 코멘트 제출 별명이 놀라운 수 있습니다. 그것은 실제로 상자에서 잘 작동하므로 그냥 git yolo하고 모든 변경 사항이 자동으로 푸시됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.