임시 저장 및 복원
변경된 파일을 일시적으로 보관하려면 git stash 명령어를 사용합니다. 이후 git status는 변경 사항이 없다고 표시됩니다.
git stash # 현재 수정된 추적 파일들을 임시 저장
git stash list # 저장된 스태시 목록 확인
git stash pop <stash-id> # 가장 최근 스태시 복원 후 삭제
git stash apply <stash-id> # 스태시 복원, 유지
git stash drop # 가장 최근 스태시 제거
git stash show # 최신 스태시의 차이 내용 출력
git stash clear # 모든 스태시 삭제
푸시 실패 시 해결 방법
동일한 파일의 동일한 위치를 여러 사람이 수정하고 푸시하면 충돌 발생으로 인해 푸시가 실패합니다.
해결 방식은 먼저 git pull로 최신 커밋을 가져와 로컬에서 병합한 후 충돌을 해결하고 다시 푸시하는 것입니다.
git pull 사용 전에 로컬 브랜치와 원격 브랜치 간 연결 설정이 필요합니다:
git branch --set-upstream-to=origin/<branch-name>
다중 사용자 협업 절차
git push origin <branch> 명령으로 변경사항을 공유합니다.
만약 실패한다면 원격 브랜치가 더 최신일 수 있으므로, git pull로 동기화를 시도해야 합니다.
병합 중 충돌이 발생하면 해당 문제를 해결하고 로컬에서 커밋한 후 다시 푸시합니다.
로컬 리포지토리 설정 로컬 설정은 글로벌 설정보다 우선순위가 높으며, 반드시 리포지토리 내부에서 수행되어야 합니다.
git config --local user.name "anliven"
git config --local user.email "anliven@yeah.net"
git config --local --list # 로컬 설정 확인
git config --local --unset [key] # 특정 설정 제거
git config --local --edit # 설정 파일 직접 편집
Git 설정 파일 우선순위 설정 파일의 적용 범위는 다음과 같습니다:
| 파일 유형 | 적용 범위 | 확인 명령 | 수정 방법 | 경로 예시 |
|---|---|---|---|---|
local |
현재 리포지토리 | git config --local --list |
git config --local --edit |
<repo>/.git/config |
global |
전체 사용자 | git config --global --list |
git config --global --edit |
C:\Users\user\.gitconfig |
system |
시스템 전체 (권장하지 않음) | git config --system --list |
git config --system --edit |
C:\Program Files\Git\mingw64\etc\gitconfig |
여러 커밋을 하나로 통합
너무 많은 커밋은 버전 관리의 혼란을 초래할 수 있습니다. 이를 방지하기 위해 git rebase -i를 통해 최근 커밋을 재정렬할 수 있습니다.
git rebase -i HEAD~3
편집기에서 다음 명령어를 사용할 수 있습니다:
pick: 커밋 포함squash: 이전 커밋과 병합fixup: 이전 커밋과 병합, 메시지 무시drop: 커밋 제거reword: 메시지 수정
예: squash 또는 s로 지정 후 저장 후 종료하면, 선택된 커밋들이 하나로 합쳐집니다. 이후 커밋 메시지를 수정하고 저장하면 완료됩니다.
명령어 실행 시 주의사항
- 실행 디렉터리와 결과 출력 경로를 항상 확인하세요.
- 탭 키를 활용해 파일명, 디렉터리명, 명령어 자동 완성 사용.
- 명확한 명령어 구문을 사용하여 오류를 줄이고 이해를 돕습니다.
git pull vs git pull --rebase 차이
git pull=git fetch+git mergegit pull --rebase=git fetch+git rebase
즉, --rebase는 기존 커밋 기반으로 새로운 커밋을 순차적으로 재배치함으로써 깔끔한 히스토리 구조를 유지합니다.
파일 권한 조작 Git에서는 파일 권한도 관리 가능합니다.
git ls-tree HEAD # 현재 트리 상태 확인
git update-index --chmod=+x test.sh # 실행 권한 추가 (index에 반영)
git commit -m "실행 권한 설정"
git ls-tree HEAD # 변경 사항 확인
오류: ^M: bad interpreter 처리
윈도우에서 개발 시 줄바꿈 형식(CRLF) 문제가 발생할 수 있습니다.
해결책:
git config --global core.autocrlf false # 자동 변환 비활성화
git config --global core.safecrlf true # 안전한 줄바꿈 체크 활성화
또는 dos2unix 도구를 사용해 파일 형식을 변경합니다.
빈 폴더를 리포지토리에 포함시키기
Git은 빈 폴더를 기본적으로 무시합니다.
해결 방법: 빈 폴더 내에 다음 내용을 포함하는 .gitignore 파일을 생성하세요:
!.gitignore
특정 브랜치나 커밋에서 단일 파일만 체크아웃
git checkout <branch-name> -- path/to/file.txt
git checkout <commit-hash> -- path/to/file.txt
주요 작업 흐름 요약 (그림 참조) 참고 링크
- 병합 (
merge):fast-forward또는no-fast-forward모드 - 충돌 해결:
merge→vi편집 →add→commit - 재배치 (
rebase): 한 브랜치의 변경을 다른 브랜치에 적용 - 인터랙티브 재배치 (
rebase -i): 커밋 메시지 수정, 병합, 삭제 등 가능 - 리셋 (
reset): --soft: 커밋 위치만 이동, 변경 사항 유지--hard: 커밋 위치 이동 + 변경 사항 삭제- 복원 (
revert): 특정 커밋을 되돌리는 새 커밋 생성 - 체리픽 (
cherry-pick): 특정 커밋의 변경 내용을 현재 브랜치에 복사 - 취득 (
fetch): 원격 변경 사항 다운로드 (병합 없음) - 풀 (
pull):fetch+merge→ 자동 병합 - 레프로그 (
reflog): 이전 수행된 작업 기록 조회,reset등으로 복구 가능
체리픽 활용
특정 브랜치에 있는 커밋을 현재 브랜치에 복제하고 싶을 때 사용합니다.
cherry-pick은 해당 커밋의 변경 내용을 새 커밋으로 만들어 현재 브랜치에 삽입합니다.
git cherry-pick <commit-hash>