HOWTO · Git

하나의 명령에서 git add, git commit 및 git push

Git에서 하나의 명령으로 파일을 추가, 커밋 및 푸시할 수 있습니다.

이 페이지의 내용

git add, git commit, git push를 하나의 바로 가기로 실행할 수 있습니다. 이 바로 가기도 Git 작업을 각각 수행합니다. 선택한 변경 사항을 스테이징하고, 로컬 커밋을 만든 다음, 그 커밋을 원격 저장소로 보냅니다. Bash 함수나 Git 별칭을 설정하고 커밋 메시지를 전달할 수 있습니다.

바로 가기를 사용하기 전에 스테이징된 변경 사항을 확인하고 현재 브랜치와 원격 저장소가 올바른지 확인하세요. 아래 두 예제는 origin을 사용하고 HEAD를 push합니다. 원격 저장소가 설정되어 있어야 하고, 원격에서 해당 브랜치를 허용해야 하며, 인증 정보에 push 권한이 있어야 합니다. push에 실패해도 이미 로컬에서 만든 커밋은 취소되지 않습니다.

한 명령으로 Add, Commit, Push 하기

작업을 자동화하기 전에 바로 가기가 어떤 변경 사항을 스테이징할지 정하세요. git add .는 현재 디렉터리와 그 하위 디렉터리의 변경 사항을 스테이징합니다. git add -A는 전체 작업 트리의 추가, 수정, 삭제를 스테이징합니다. 두 명령 모두 커밋하려던 범위 밖의 작업을 포함할 수 있으므로, 범위가 확실하지 않다면 커밋하기 전에 git diff --cached로 스테이징된 차이를 확인하세요.

예제의 git push origin HEAD는 현재 커밋을 origin으로 보냅니다. 이를 사용하려면 원격 저장소가 설정되어 있고 원격에서 해당 브랜치를 허용해야 합니다. push에 실패하면 커밋은 로컬에 남습니다. 다시 시도하기 전에 원격 URL, 브랜치 정책, 인증, 네트워크 연결을 확인하세요.

Bash 함수 만들기

셸에서 짧은 명령어를 사용하고 싶다면 Bash 함수가 편리합니다. 함수를 ~/.bashrc에 추가한 다음, 현재 Bash 세션에서 source ~/.bashrc를 실행해 파일을 불러오세요. 이후 세션에서 파일을 불러오는 방식은 셸을 어떻게 시작하고 설정했는지에 따라 다릅니다. Git은 .bashrc를 읽지 않습니다. 함수가 보이지 않으면 현재 Bash 세션에서 해당 파일을 불러오는지 확인하거나 직접 source 명령을 실행하세요.

이 예제는 임시 로컬 저장소와 원격 저장소를 만들고, acp를 정의한 뒤 사용자 지정 메시지와 함께 호출하는 독립 실행형 예제입니다. 직접 설정할 때는 함수 정의를 ~/.bashrc에 복사하세요. 임시 저장소를 만드는 명령도 포함되어 있어 예제를 단독으로 실행할 수 있습니다.

set -e
tmp_dir=$(mktemp -d)
trap 'rm -rf "$tmp_dir"' EXIT
git init --bare -q "$tmp_dir/remote.git"
git init -q -b main "$tmp_dir/work"
cd "$tmp_dir/work"
git config user.name "Example User"
git config user.email "example@example.com"
git remote add origin "$tmp_dir/remote.git"
printf 'Initial content\n' > README.md
git add README.md
git commit -qm "Initial commit"
push_output=$(git push -q -u origin HEAD 2>&1) || {
    printf '%s\n' "$push_output" >&2
    exit 1
}
printf 'Updated content\n' > README.md
acp() {
    git add -A && git commit -qm "$1" && {
        push_output=$(git push -q origin HEAD 2>&1) || {
            printf '%s\n' "$push_output" >&2
            return 1
        }
    }
}
acp "Update README.md"

여기서 "$1"은 첫 번째 인수를 커밋 메시지로 전달합니다. 이 함수는 git add -A를 사용하므로 커밋 전에 작업 트리 전체의 변경 사항을 스테이징합니다. 저장소에 이번 커밋에서 제외하고 싶은 다른 작업이 있다면 먼저 스테이징된 차이를 검토하세요. 함수를 ~/.bashrc에 저장한 후 사용하려면 현재 세션에서 source ~/.bashrc를 한 번 실행하고, acp "Update README.md"처럼 따옴표로 묶은 메시지를 전달해 호출하세요.

Git 별칭 만들기

Git 별칭은 셸 시작 파일에 의존하지 않고 저장소에서 사용할 수 있습니다. git config --global alias.lazygit '!f() { git add -A && git commit -m "$@" && git push origin HEAD; }; f'로 설정한 다음 git lazygit "Update LICENSE.md"로 실행하세요. 모든 저장소에서 별칭을 사용하려면 --global을 지정하고, 현재 저장소에만 저장하려면 생략하세요.

실행 가능한 이 예제는 함수 예제와 같은 임시 로컬 환경을 사용한 다음 저장소 범위의 별칭을 정의합니다. 별칭은 &&로 각 작업을 연결하므로, 앞선 작업이 성공해야 다음 작업으로 진행합니다.

set -e
tmp_dir=$(mktemp -d)
trap 'rm -rf "$tmp_dir"' EXIT
git init --bare -q "$tmp_dir/remote.git"
git init -q -b main "$tmp_dir/work"
cd "$tmp_dir/work"
git config user.name "Example User"
git config user.email "example@example.com"
git remote add origin "$tmp_dir/remote.git"
printf 'Initial content\n' > LICENSE.md
git add LICENSE.md
git commit -qm "Initial commit"
push_output=$(git push -q -u origin HEAD 2>&1) || {
    printf '%s\n' "$push_output" >&2
    exit 1
}
git config alias.lazygit '!f() { git add -A && git commit -qm "$@" && git push -q origin HEAD; }; f'
printf 'Updated content\n' > LICENSE.md
if ! alias_output=$(git lazygit "Update LICENSE.md" 2>&1); then
    printf '%s\n' "$alias_output" >&2
    exit 1
fi

별칭에서 "$@"는 git lazygit 뒤에 입력한 인수를 전달합니다. 여러 단어로 된 메시지를 따옴표로 묶으면 하나의 커밋 메시지로 전달됩니다. 별칭도 git add -A로 모든 변경 사항을 스테이징하므로 범위를 확인해야 한다면 커밋 전에 git diff --cached를 확인하세요. 예제는 별칭을 임시 저장소에 저장합니다. 위의 --global 명령을 사용하면 사용자 Git 설정에 저장됩니다.

적절한 방법 선택하고 사용하기

셸 로직을 포함하거나 Bash 설정에 맞게 조정할 수 있는 셸 명령어가 필요하다면 Bash 함수를 사용하세요. Git에 연결된 바로 가기를 git <alias> 형식으로 사용하고 싶다면 Git 별칭을 선택하세요. 두 방법 모두 git add, git commit, git push는 각각 별개의 단계이며, 커밋에 성공해도 push까지 성공하는 것은 아닙니다.

바로 가기를 실행하기 전에 의도한 저장소와 브랜치에 있는지, origin이 의도한 원격 저장소를 가리키는지, 원하는 변경 사항만 스테이징되는지 확인하세요. 여기서 설명한 함수와 별칭은 모두 git add -A를 사용해 작업 트리 전체의 추가, 수정, 삭제를 스테이징합니다. 특정 디렉터리만 스테이징하려면 스테이징 명령을 의도적으로 바꾸고 결과를 검토하세요. 커밋 메시지에 파일 이름을 적었다고 해서 바로 가기가 해당 파일만 선택한다고 가정하지 마세요.

함수를 사용할 수 없다면 현재 Bash 세션에서 ~/.bashrc를 불러왔는지 확인하세요. 별칭을 사용할 수 없다면 별칭을 저장한 저장소 또는 전역 Git 설정을 확인하세요. push가 거부되어도 로컬 커밋은 남아 있습니다. 원격 저장소나 브랜치 문제를 해결한 뒤 저장소의 일반적인 절차에 따라 의도한 커밋을 push하세요.