Git Commit: 마스터 클래스
게시 됨: 2023-02-26 모든 버전 제어 시스템의 기본 요구 사항은 서로 다른 버전의 파일을 저장하는 것입니다. Git에서 이를 수행하는 명령은 commit
입니다. 여기 당신이 알아야 할 모든 것이 있습니다.
Git에서 커밋이란 무엇입니까?
커밋 명령 구성
커밋 명령 사용
기본 커밋
자동 스테이징 파일
스테이징과 커밋을 동시에
다른 브랜치에 커밋
커밋 변경
커밋에서 변경 사항 제거
전체 커밋 되돌리기
Git 스위스 아미 나이프
Git에서 커밋이란 무엇입니까?
커밋은 개발 기록을 구성하는 프로젝트의 수명 주기 동안 만들어진 일련의 스냅샷입니다. 커밋을 통해 과거의 다른 시점에 있던 프로젝트 버전을 추출할 수 있습니다. 그게 왜 중요한가요?
버전 제어 시스템(VCS)은 소프트웨어 소스 코드 및 개발 프로젝트와 함께 가장 일반적으로 사용됩니다. 그러나 책의 챕터가 포함된 Markdown 파일과 같은 모든 텍스트 파일 모음과 함께 성공적으로 사용할 수 있습니다.
프로젝트 디렉토리의 모든 파일이 VCS에서 처리되는 것을 원하지 않을 수 있으므로 버전 제어를 원하는 파일을 지정할 수 있어야 합니다. 이렇게 하면 프로젝트의 버전 제어 보기에 추가됩니다. 변경 사항이 있는지 모니터링됩니다.
이를 달성하는 또 다른 방법은 무시 목록을 사용하는 것입니다. 이것은 항상 무시해야 하는 파일, 디렉토리 또는 파일 유형을 Git에 알려줍니다.
시간이 지남에 따라 새 파일이 프로젝트에 추가됨에 따라 일부는 버전 제어 시스템에 추가되어야 합니다. Git에서는 add
명령으로 처리합니다. 실제로 add
명령은 이중 서비스를 수행합니다.
프로젝트에 적용된 변경 내역을 유지하기 위해 commit
명령을 사용하여 프로젝트 상태의 스냅샷을 저장하도록 Git에 주기적으로 요청합니다. 여기에서 add
명령이 워크플로에 다시 나타납니다. add
명령을 사용하여 스냅샷에 포함하려는 변경된 파일을 Git에 알립니다. 그런 다음 commit
사용하여 Git에 스냅샷을 생성하도록 지시합니다.
커밋 명령 구성
커밋에 대한 정보가 함께 저장되므로 커밋을 만든 사람, 커밋 시간 및 커밋 내용을 항상 알 수 있습니다. 이 메타데이터 중 일부는 커밋 메시지와 같이 커밋 시 캡처됩니다.
개발팀 구성원의 ID와 관련된 메타데이터는 동일한 정보가 반복적으로 제공되는 것을 방지하기 위해 각 사용자가 구성할 수 있습니다.
컴퓨터의 모든 리포지토리에 대해 전역적으로 이름을 설정하려면 이 명령을 사용하십시오.
git config --global user.name "데이브 맥케이"
이름이 설정되었는지 확인하려면 이 명령을 사용하십시오.
자식 구성 --글로벌 사용자 이름
특정 리포지토리에서 다른 이름을 사용해야 하는 경우 프로젝트의 디렉터리로 변경하고 --global
옵션 없이 동일한 명령을 사용합니다.
git config user.name "맥케이, 데이빗"
자식 구성 사용자 이름
이제 이 리포지토리에 대한 다른 기본 사용자 이름이 있으며 전역 이름은 여전히 다른 리포지토리에 사용됩니다.
비슷한 방식으로 --global
옵션을 포함하거나 생략하여 전역적으로 또는 단일 리포지토리에 대한 이메일 주소를 설정할 수 있습니다.
git config user.email "[email protected]"
git config --global user.email "[email protected]"
자식 구성 사용자.이메일
자식 구성 --글로벌 사용자.이메일
이러한 설정은 구성 파일에 보관됩니다. 전역 Git 설정은 "~/.gitconfig"에 보관되며 리포지토리별 설정은 리포지토리의 ".git/config" 파일에 보관됩니다.
commit
명령은 작동할 때 이러한 값을 참조하고 사용합니다.
커밋 명령 사용
commit
명령의 기본 용도는 인덱스라고 하는 스테이징 영역에 있는 파일을 가져와 저장소의 현재 분기에 커밋으로 저장하는 것입니다.
기본 커밋
파일이 변경된 프로젝트가 있습니다. add
명령을 사용하여 파일을 준비한 다음 커밋합니다. 변경 목적에 대한 간단한 설명을 제공할 수 있도록 -m
(커밋 메시지) 옵션을 사용하고 있습니다. 이 옵션을 사용하지 않으면 커밋이 발생할 때 커밋 메시지를 묻는 메시지가 표시됩니다. 명령줄에 하나를 추가하는 것이 더 편리합니다.
자식 추가 jibber.c
git commit -m "업데이트된 도움말 텍스트"
git log
명령을 사용하면 가장 최근 커밋이 목록 맨 위에 오도록 시간순으로 커밋 세부 정보를 검토할 수 있습니다.
자식 로그
커밋은 less
에 표시됩니다.
커밋에는 이전에 제공한 이름과 이메일 주소로 태그가 지정되었으며 커밋 메시지도 기록됩니다.
자동 스테이징 파일
많은 파일을 준비하는 데 약간의 시간이 걸릴 수 있습니다. 다른 접근 방식은 add
와 함께 -A
(모두) 옵션을 사용하는 것입니다.
이렇게 하면 현재 추적되지 않은 모든 파일과 함께 수정된 모든 파일이 자동으로 준비됩니다. 추적되지 않은 파일의 스테이징은 ".gitignore" 파일의 설정을 따릅니다. Git은 포함하고 싶지 않다고 말한 파일을 준비하지 않습니다. 마지막으로 더 이상 작업 디렉토리에 없는 색인의 파일이 색인에서 제거 됩니다.
일반적으로 -A
옵션을 사용하면 한 번에 많은 일이 발생할 수 있습니다. --dry-run
옵션을 사용하면 변경 사항을 실제로 수행하지 않고도 미리 볼 수 있습니다.
git add -A --드라이런
이 예에서는 두 개의 수정된 기존 파일과 두 개의 새 파일을 준비합니다. commit
명령을 사용하기 전에 -A
옵션을 사용하겠습니다.
자식 추가 -A
git commit -m "향상된 구문 분석"
총 4개의 파일이 변경된 것을 확인할 수 있습니다. 그 중 두 개는 나열된 새로 생성된 파일입니다.
스테이징과 커밋을 동시에
commit
명령에는 소문자 -a
(모두) 옵션이 있습니다. 이것은 한 단계에서 파일의 준비 및 커밋을 수행합니다.
commit -a
옵션은 수정된 기존 파일을 준비 및 커밋하고 작업 디렉토리에서 파일이 제거된 경우 인덱스에서 파일을 제거합니다 . 추적되지 않은 파일은 자동으로 스테이징 되지 않습니다 .
add
명령과 마찬가지로 commit 명령에는 실행하기 전에 작업을 미리 볼 수 있는 --dry-run
옵션이 있습니다.
git commit -a --드라이런
이제 명령을 실행해 봅시다.
git commit -a --드라이런
파일은 우리를 위해 준비되고 커밋됩니다.
다른 브랜치에 커밋
작업 디렉토리의 파일을 변경한 후 올바른 분기를 체크아웃하지 않았다는 것을 알게 된 경우 현재 분기에 영향을 주지 않고 변경 사항을 올바른 분기에 커밋해야 합니다.
Git에는 다른 브랜치에 커밋하기 위한 명령이 없습니다. 하지만 약간의 Git 손재주로 이 상황을 바로잡을 수 있습니다.
Git stash
명령을 사용하여 변경 사항을 복사합니다. 그런 다음 올바른 분기를 확인하고 숨김에서 변경 사항을 적용합니다. 숨겨진 변경 사항을 적용하기 위해 우리는 apply
명령이 아닌 pop
명령을 사용하고 있습니다. pop
명령은 변경 사항을 적용하고 숨김에서 제거합니다.
리포지토리의 new-parser
브랜치에서 몇 가지 사항을 변경했습니다. 그것들은 classic-parser
브랜치에서 만들어졌어야 합니다.
자식 숨김
git checkout 클래식 파서
자식 숨김 팝
이제 commit
수행하고 이 분기를 업데이트할 수 있습니다.
git commit -a -m "추가 사전 구문 분석기 기능"
new-parser
분기로 돌아가면 최신 상태임을 알 수 있습니다. 즉, 작업 디렉터리에서 변경 사항이 제거되었고 저장소와 파일이 동기화되었음을 의미합니다.
git checkout 새 구문 분석기
자식 상태
관련: 별도의 Git 분기를 업데이트하고 유지하는 방법
커밋 변경
커밋 메시지를 개선해야 하는 경우(오타를 발견했을 수 있음) 커밋에 포함되어야 하는 파일을 준비하는 것을 잊은 경우 --amend
옵션을 사용하여 문제를 바로잡을 수 있습니다. 주의할 점은 원격 리포지토리로 푸시된 커밋에 사용하면 안 된다는 것입니다.
마지막 커밋 메시지에서 "fraze"는 "phrase"여야 합니다. git log
사용하면 이것을 볼 수 있습니다.
이를 수정하기 위해 다음과 같이 --amend
옵션을 사용합니다.
git commit --amend -m "최적화된 구문 식별"
다시 git log
사용하면 이전 커밋이 수정된 커밋 메시지와 함께 새 커밋으로 대체된 것을 볼 수 있습니다.
준비하지 않은 파일을 추가하려는 경우 해당 파일을 커밋하여 이전 커밋의 일부로 나타나도록 할 수 있습니다.
add
사용하여 파일을 준비한 다음 --amend
옵션으로 커밋합니다. --no-edit
옵션은 새로운 커밋 메시지를 제공할 필요가 없음을 의미합니다. 이전 커밋 메시지가 유지됩니다.
자식 추가 jibber.c
자식 커밋 --수정 --노 편집
커밋에서 변경 사항 제거
실수로 의도하지 않은 파일을 준비하고 커밋한 경우 reset
명령을 사용하여 커밋에서 해당 파일을 제거할 수 있습니다. 커밋을 스테이징 영역 또는 인덱스로 다시 재설정합니다. 그런 다음 파일을 제거하고 나머지 파일을 다시 커밋합니다.
스테이징 영역에 대한 마지막 커밋을 재설정하려면 reset --soft
명령을 사용합니다. HEAD~
"프로젝트 커밋 타임라인의 HEAD 뒤에 있는 커밋" 또는 영어로 "마지막 커밋"의 줄임말입니다.
git reset --soft HEAD~
포함되지 않아야 하는 파일을 제거하려면 reset --mixed
명령을 사용합니다. 이렇게 하면 해당 변경 사항이 다시 작업 디렉터리로 재설정되어 수정된 파일이 준비되지 않은 커밋되지 않은 파일로 다시 생성됩니다.
자식 재설정 --혼합 jibber.c
인덱스에 남아 있는 다른 파일을 커밋해야 합니다.
git commit -m "실험적 조정"
원래 커밋에 있던 다른 두 파일은 우리를 위해 다시 커밋됩니다.
관련: Git 커밋을 수정, 편집 또는 실행 취소하는 방법(Git 기록 변경)
전체 커밋 되돌리기
때로는 전체 커밋을 취소하는 것이 가장 쉬운 일입니다. 작업 디렉토리와 저장소를 커밋하기 전의 상태로 되돌립니다.
커밋의 해시 참조 ID를 사용해야 합니다. git log
사용하여 이를 찾을 수 있습니다.
해당 참조를 복사하여 revert
명령에서 사용합니다.
자식 되돌리기 e5bd4560aef8164c6ca9d6d4620b9db7f66aecc8
이렇게 하면 되돌리기 메시지를 편집할 수 있도록 기본 편집기가 열립니다. 입력된 기본 메시지가 있습니다. 이것을 사용하거나 원하는 대로 편집할 수 있습니다.
되돌리기 메시지에 만족하면 파일을 저장하고 편집기를 종료합니다. nano에서는 "Ctrl+O" 및 "Ctrl+X"를 사용하여 이 작업을 수행합니다.
다시 git log
사용하면 되돌린 커밋의 변경 사항을 취소하는 새 커밋이 추가된 것을 확인할 수 있습니다.
Git 스위스 아미 나이프
분명히 commit
가장 중요한 Git 명령 중 하나입니다. 많은 것을 할 수 있으므로 배울 것이 많습니다. 덜 사용되는 기능을 파악하는 데 시간이 많이 걸립니다. 지금 당장 실수를 바로잡아야 할 때 미리 준비했다는 사실에 만족할 것입니다.
관련: Git 병합 사용 방법