Git 저장소 생성
저장소 초기화
새로운 Git 저장소를 생성하려면 다음 명령어를 사용합니다:
git init
현재 Git 저장소의 루트 경로를 확인하려면:
git rev-parse --show-toplevel
빈(Bare) 저장소 생성
공유용 중앙 저장소를 구성할 때 빈 저장소를 사용합니다. 일반 저장소와 달리 작업 디렉토리가 포함되지 않습니다:
git init --bare /path/to/shared/repository.git
저장소 복제
원격 저장소를 로컬로 복제하는 다양한 방법을 알아봅니다:
git clone https://github.com/example/project.git
최 최근 커밋만 복제한 제한된 복제:
git clone --depth=1 https://github.com/example/large-project.git
SSH 프로토콜을 사용한 복제:
git clone ssh://git@server.example.com:22/path/to/repository.git
git clone developer@host.example.com:/data/project.git
서브모듈 포함 복제
서브모듈이 포함된大型 프로젝트를 복제할 때:
git clone --recursive git@github.com:example/main-project.git
복제 후 서브모듈 초기화:
git submodule update --init --recursive
로컬 저장소에 커밋
커밋 메시지에 서명을 추가하려면 -s 옵션을 사용합니다:
git commit -s
直전 커밋을 수정하고 싶을 때는 --amend 옵션을 활용합니다:
git commit --s --amend
이 명령어는 커밋 메시지만 수정하는 것이 아니라, 파일 변경사항도 직전 커밋에 포함시킵니다.
원격 저장소 동기화
원격에서 로컬로 가져오기
git pull origin main:develop
git pull은 원격의 최신 커밋을 로컬로 가져와合并합니다. 단, staging Area에 있는 변경사항은 포함되지 않습니다.
변경사항만 가져오고 즉시合并하지 않으려면:
git fetch origin
로컬에서 원격으로推送하기
git push origin feature/new-login
매개변수를 생략하면 기본 원격 저장소(origin)와 현재 브랜치로推送됩니다:
git push
推送 후 로컬 작업 디렉토리는 자동으로更新되지 않습니다. 원격 저장소 상태로 강제로 되돌리려면:
git reset --hard origin/main
원격 저장소 관리
원격 저장소 정보 확인
등록된 원격 저장소 목록과 주소를 조회합니다:
git remote -v
원격 저장소 추가
git remote add review ssh://developer@git.company.com:22/project/team/module.git
원격 저장소 제거
git remote remove old-remote-name
브랜치 삭제
로컬 브랜치 삭제:
git branch -D feature/bugfix-1234
원격 브랜치 삭제:
git push origin --delete feature/obsolete-branch
커밋 기록 관리
커밋 이력 조회
전체 커밋 횟수를 확인:
git log --oneline | wc -l
상세 커밋 이력 확인:
git log
버전 되돌리기
Git은 세 가지 리셋 모드를 제공합니다:
| 옵션 | 설명 |
|---|---|
--mixed |
HEAD와 인덱스를指定커밋으로 이동, 작업 디렉토리 유지 |
--soft |
HEAD만 이동, 인덱스와 작업 디렉토리 unchanged |
--hard |
HEAD, 인덱스, 작업 디렉토리 모두指定커밋으로 이동 |
완전히 되돌리기
이후 커밋 기록을 모두 삭제하고指定커밋으로 돌아갑니다:
git reset --hard HEAD~3
git reset --hard a1b2c3d4e5f6
원격 저장소에도 강제로 적용:
git push --force origin feature/temp-branch
мягко 복원
커밋 포인터만 이동하고 작업 내용은 유지합니다:
git reset --soft previous-commit-hash
이 경우 지정한 커밋 이후의 기록은 사라지지만, 변경 내용은 staging Area에 남습니다.
특정 커밋 되돌리기
歷史를 삭제하지 않고 특정 커밋의 변경사항을元복하려면 git revert를 사용합니다:
git revert --no-commit problematic-commit-hash
git commit -m "Revert: Rollback specific change"
파일 차이 비교
작업 디렉토리 vs Staging Area
git diff
출력 형식에서 "-"로 시작하는 줄은 이전 버전, "+"로 시작하는 줄은 이후 버전입니다. 인덱스 영역과 작업 디렉토리의 해시값도 함께 표시됩니다.
Staging Area vs 최종 커밋
git diff --cached
작업 디렉토리 vs 최종 커밋
git diff HEAD
특정 파일 비교
git diff HEAD~5 -- config/settings.yml
직전 커밋에서 변경된 파일 목록
git diff HEAD^ HEAD --name-only
줄바꿈 문자 차이 무시
git config --global core.whitespace cr-at-eol
git config --global core.autocrlf false
패치 파일 관리
패치 생성
특정 커밋에서 패치 파일 생성:
git format-patch -1
git format-patch a1b2c3d4e5f6 -1
패치 적용 확인 및 적용
패치 적용 가능 여부 확인:
git apply --check fix-bug-001.patch
패치 적용:
git apply fix-bug-001.patch
브랜치 조작
브랜치 조회
로컬 브랜치 목록:
git branch
원격 브랜치 목록:
git branch -r
전체 브랜치 (로컬 + 원격):
git branch -a
브랜치 생성 및 전환
새 브랜치 생성:
git branch feature/user-authentication
생성 즉시 전환:
git checkout -b feature/user-authentication
브랜치 전환
git checkout develop-2023
브랜치 삭제
git branch -d feature/completed-module
브랜치合并
git merge feature/new-function
충돌 해결 예시
병합 시 충돌이 발생하면 다음과 같이 표시됩니다:
000
<<<<<<< HEAD
main_feature_code
=======
dev_secondary_code
>>>>>>> dev-branch
<와 > 사이의 코드를 적절히 수정하여 충돌을 해결합니다.
원격 브랜치를 로컬로 가져오기
방법 1: 자동 전환
git checkout -b local-branch-name origin/remote-branch-name
로컬 브랜치가 생성되면서 원격 브랜치와 추적 관계가 설정됩니다.
방법 2: 수동 전환 필요
git fetch origin remote-branch-name:local-branch-name
자동 전환되지 않으므로 수동으로 checkout해야 하며, 추적 관계도 설정되지 않습니다.
방법 3: pull 사용
git pull origin remote-branch-name:local-branch-name
원격과 로컬 브랜치명이 동일하면 콜론 뒤 내용을 생략할 수 있습니다.
서브모듈 관리
서브모듈 추가
git submodule add git@github.com:example/dependency-library.git libs/external
서브모듈 업데이트
git fetch origin
git reset --hard origin/main
파일 권한 추적
현재 설정 확인
git config --get core.fileMode
권한 추적 활성화
git config core.fileMode true
병합 관련 명령
병합 진행 중 문제 발생 시 작업 취소:
git reset --merge
이 명령은 병합 시작 전 상태로 돌아갑니다.