wiki:it:github:troubleshooting
차이
문서의 선택한 두 판 사이의 차이를 보여줍니다.
다음 판 | 이전 판 | ||
wiki:it:github:troubleshooting [2025/07/30 06:43] – 만듦 - 바깥 편집 127.0.0.1 | wiki:it:github:troubleshooting [2025/07/31 05:08] (현재) – [2) 온라인 리소스] syjang0803 | ||
---|---|---|---|
줄 3: | 줄 3: | ||
**Git/ | **Git/ | ||
- | ===== 🆘 문제 해결 기본 원칙 ===== | ||
- | ==== 당황하지 마세요! ==== | + | ---- |
- | - 🔒 **Git은 안전합니다**: | + | ===== 1. 🆘 문제 해결 기본 원칙 ===== |
- | - 📚 **기록이 남습니다**: | + | ==== 1) 당황하지 마세요! ==== |
- | - 🤝 **도움을 받을 수 있습니다**: | + | - 🔒 **Git은 안전합니다**: |
+ | - 📚 **기록이 남습니다**: | ||
+ | - 🤝 **도움을 받을 수 있습니다**: | ||
- | ==== 문제 해결 순서 ==== | + | ---- |
- | 1. **상황 파악하기**: | + | ==== 2) 문제 해결 순서 ==== |
- | 2. **오류 메시지 읽기**: 오류 메시지에 해결 방법이 있는 경우가 많음 | + | |
- | 3. **상태 확인하기**: | + | |
- | 4. **단계별 해결**: 한 번에 하나씩 차근차근 해결 | + | |
+ | | ||
- | ===== 🚨 가장 자주 발생하는 문제들 ===== | + | ===== 2. 🚨 가장 자주 발생하는 문제들 ===== |
- | + | ---- | |
- | ==== 1. 커밋 메시지를 잘못 작성했을 때 ==== | + | ==== 1) 커밋 메시지를 잘못 작성했을 때 ==== |
**문제 상황:** | **문제 상황:** | ||
- | <code bash> | + | |
+ | <file bash> | ||
git commit -m " | git commit -m " | ||
- | </code> | + | </file> |
**해결 방법:** | **해결 방법:** | ||
**방법 1: 아직 push하지 않은 경우 (가장 쉬움)** | **방법 1: 아직 push하지 않은 경우 (가장 쉬움)** | ||
- | <code bash> | + | |
+ | <file bash> | ||
# 마지막 커밋 메시지 수정 | # 마지막 커밋 메시지 수정 | ||
git commit --amend -m " | git commit --amend -m " | ||
줄 34: | 줄 38: | ||
# 결과 확인 | # 결과 확인 | ||
git log --oneline -1 | git log --oneline -1 | ||
- | </code> | + | </file> |
**방법 2: 이미 push한 경우** | **방법 2: 이미 push한 경우** | ||
- | <code bash> | + | |
+ | <file bash> | ||
# 주의: 이 방법은 혼자 작업할 때만 사용하세요! | # 주의: 이 방법은 혼자 작업할 때만 사용하세요! | ||
git commit --amend -m " | git commit --amend -m " | ||
git push --force-with-lease origin main | git push --force-with-lease origin main | ||
- | </code> | + | </file> |
**💡 예방법: | **💡 예방법: | ||
- | - 커밋 메시지를 의미있게 작성하는 습관 기르기 | + | |
- | - 커밋 전에 | + | - 커밋 전에 |
- | ==== 2. 잘못된 파일을 커밋했을 때 ==== | + | ---- |
+ | ==== 2) 잘못된 파일을 커밋했을 때 ==== | ||
**문제 상황:** | **문제 상황:** | ||
- | <code bash> | + | |
+ | <file bash> | ||
git add . | git add . | ||
git commit -m " | git commit -m " | ||
# 이후에 비밀번호 파일이나 불필요한 파일이 포함되었다는 것을 발견 | # 이후에 비밀번호 파일이나 불필요한 파일이 포함되었다는 것을 발견 | ||
- | </code> | + | </file> |
**해결 방법:** | **해결 방법:** | ||
**방법 1: 아직 push하지 않은 경우** | **방법 1: 아직 push하지 않은 경우** | ||
- | <code bash> | + | |
+ | <file bash> | ||
# 마지막 커밋 취소 (변경사항은 유지) | # 마지막 커밋 취소 (변경사항은 유지) | ||
git reset --soft HEAD~1 | git reset --soft HEAD~1 | ||
줄 70: | 줄 78: | ||
git add . | git add . | ||
git commit -m " | git commit -m " | ||
- | </code> | + | </file> |
**방법 2: 이미 push한 경우** | **방법 2: 이미 push한 경우** | ||
- | <code bash> | + | |
+ | <file bash> | ||
# 문제 파일을 Git에서 제거 (파일은 유지) | # 문제 파일을 Git에서 제거 (파일은 유지) | ||
git rm --cached password.txt | git rm --cached password.txt | ||
줄 84: | 줄 93: | ||
git commit -m " | git commit -m " | ||
git push origin main | git push origin main | ||
- | </code> | + | </file> |
**💡 예방법: | **💡 예방법: | ||
- | - `.gitignore` 파일을 미리 설정하기 | + | |
- | - `git add .` 대신 | + | - '' |
- | ==== 3. Push가 거부될 때 ==== | + | ---- |
+ | ==== 3) Push가 거부될 때 ==== | ||
**문제 상황:** | **문제 상황:** | ||
- | <code> | + | |
+ | <file> | ||
! [rejected] main -> main (non-fast-forward) | ! [rejected] main -> main (non-fast-forward) | ||
error: failed to push some refs to ' | error: failed to push some refs to ' | ||
줄 99: | 줄 110: | ||
hint: its remote counterpart. Integrate the remote changes (e.g. | hint: its remote counterpart. Integrate the remote changes (e.g. | ||
hint: 'git pull ...') before pushing again. | hint: 'git pull ...') before pushing again. | ||
- | </code> | + | </file> |
**원인:** GitHub에 내가 모르는 새로운 커밋이 있음 (다른 컴퓨터에서 작업했거나 팀원이 작업한 경우) | **원인:** GitHub에 내가 모르는 새로운 커밋이 있음 (다른 컴퓨터에서 작업했거나 팀원이 작업한 경우) | ||
줄 106: | 줄 117: | ||
**1단계: 상황 확인** | **1단계: 상황 확인** | ||
- | <code bash> | + | |
+ | <file bash> | ||
# 현재 상태 확인 | # 현재 상태 확인 | ||
git status | git status | ||
줄 116: | 줄 128: | ||
git log --oneline origin/ | git log --oneline origin/ | ||
git log --oneline HEAD..origin/ | git log --oneline HEAD..origin/ | ||
- | </code> | + | </file> |
**2단계: 최신 코드 받아오기** | **2단계: 최신 코드 받아오기** | ||
- | <code bash> | + | |
+ | <file bash> | ||
# 원격 저장소의 최신 코드 받아오기 | # 원격 저장소의 최신 코드 받아오기 | ||
git pull origin main | git pull origin main | ||
줄 125: | 줄 138: | ||
# 충돌이 없으면 자동으로 병합됨 | # 충돌이 없으면 자동으로 병합됨 | ||
# 충돌이 있으면 해결 후 커밋 | # 충돌이 있으면 해결 후 커밋 | ||
- | </code> | + | </file> |
**3단계: 다시 업로드** | **3단계: 다시 업로드** | ||
- | <code bash> | + | |
+ | <file bash> | ||
git push origin main | git push origin main | ||
- | </code> | + | </file> |
**💡 예방법: | **💡 예방법: | ||
- | - 작업 시작 전 항상 | + | |
- | - 자주 push하여 충돌 가능성 줄이기 | + | - 자주 push하여 충돌 가능성 줄이기 |
- | ==== 4. 브랜치 이동 시 " | + | ---- |
+ | ==== 4) 브랜치 이동 시 " | ||
**문제 상황:** | **문제 상황:** | ||
- | <code> | + | |
+ | <file> | ||
error: Your local changes to the following files would be overwritten by checkout: | error: Your local changes to the following files would be overwritten by checkout: | ||
index.html | index.html | ||
Please commit your changes or stash them before you switch branches. | Please commit your changes or stash them before you switch branches. | ||
- | </code> | + | </file> |
**원인:** 현재 브랜치에서 수정한 파일이 있는데 커밋하지 않고 다른 브랜치로 이동하려고 할 때 | **원인:** 현재 브랜치에서 수정한 파일이 있는데 커밋하지 않고 다른 브랜치로 이동하려고 할 때 | ||
줄 150: | 줄 166: | ||
**방법 1: 변경사항을 커밋하기 (추천)** | **방법 1: 변경사항을 커밋하기 (추천)** | ||
- | <code bash> | + | |
+ | <file bash> | ||
# 현재 작업 내용 확인 | # 현재 작업 내용 확인 | ||
git status | git status | ||
줄 161: | 줄 178: | ||
# 이제 브랜치 이동 가능 | # 이제 브랜치 이동 가능 | ||
git switch other-branch | git switch other-branch | ||
- | </code> | + | </file> |
**방법 2: 임시 저장 (stash) 사용하기** | **방법 2: 임시 저장 (stash) 사용하기** | ||
- | <code bash> | + | |
+ | <file bash> | ||
# 변경사항 임시 저장 | # 변경사항 임시 저장 | ||
git stash | git stash | ||
줄 174: | 줄 192: | ||
git switch original-branch | git switch original-branch | ||
git stash pop | git stash pop | ||
- | </code> | + | </file> |
**방법 3: 변경사항 버리기 (주의!)** | **방법 3: 변경사항 버리기 (주의!)** | ||
- | <code bash> | + | |
+ | <file bash> | ||
# 주의: 이 방법은 변경사항을 완전히 삭제합니다! | # 주의: 이 방법은 변경사항을 완전히 삭제합니다! | ||
git checkout -- . | git checkout -- . | ||
줄 183: | 줄 202: | ||
# 이제 브랜치 이동 가능 | # 이제 브랜치 이동 가능 | ||
git switch other-branch | git switch other-branch | ||
- | </code> | + | </file> |
- | ==== 5. 머지 충돌 (Merge Conflict) ==== | + | ---- |
+ | ==== 5) 머지 충돌 (Merge Conflict) ==== | ||
**문제 상황:** | **문제 상황:** | ||
- | <code> | + | |
+ | <file> | ||
Auto-merging index.html | Auto-merging index.html | ||
CONFLICT (content): Merge conflict in index.html | CONFLICT (content): Merge conflict in index.html | ||
Automatic merge failed; fix conflicts and then commit the result. | Automatic merge failed; fix conflicts and then commit the result. | ||
- | </code> | + | </file> |
**원인:** 같은 파일의 같은 부분을 서로 다르게 수정했을 때 | **원인:** 같은 파일의 같은 부분을 서로 다르게 수정했을 때 | ||
줄 199: | 줄 220: | ||
**1단계: 충돌 파일 확인** | **1단계: 충돌 파일 확인** | ||
- | <code bash> | + | |
+ | <file bash> | ||
# 충돌 상태 확인 | # 충돌 상태 확인 | ||
git status | git status | ||
줄 205: | 줄 227: | ||
# 충돌 파일 내용 보기 | # 충돌 파일 내용 보기 | ||
cat index.html | cat index.html | ||
- | </code> | + | </file> |
**2단계: 충돌 마커 이해하기** | **2단계: 충돌 마커 이해하기** | ||
- | <code html> | + | |
+ | <file html> | ||
< | < | ||
< | < | ||
줄 219: | 줄 242: | ||
</ | </ | ||
</ | </ | ||
- | </code> | + | </file> |
**💡 충돌 마커 의미:** | **💡 충돌 마커 의미:** | ||
- | - `<<<<<<< | + | |
- | - `=======`: 구분선 | + | - %%=======%%: 구분선 |
- | - `>>>>>>> | + | - %%>>>>>>> |
**3단계: 충돌 해결** | **3단계: 충돌 해결** | ||
- | <code bash> | + | |
+ | <file bash> | ||
# 에디터로 파일 수정 | # 에디터로 파일 수정 | ||
nano index.html | nano index.html | ||
줄 233: | 줄 257: | ||
# 충돌 마커 제거하고 원하는 내용으로 수정 | # 충돌 마커 제거하고 원하는 내용으로 수정 | ||
# 예: < | # 예: < | ||
- | </code> | + | </file> |
**4단계: 병합 완료** | **4단계: 병합 완료** | ||
- | <code bash> | + | |
+ | <file bash> | ||
# 수정된 파일 추가 | # 수정된 파일 추가 | ||
git add index.html | git add index.html | ||
줄 245: | 줄 270: | ||
# 결과 확인 | # 결과 확인 | ||
git log --oneline --graph | git log --oneline --graph | ||
- | </code> | + | </file> |
- | ===== 🔐 인증 관련 문제 ===== | + | ===== 3. 🔐 인증 관련 문제 ===== |
- | + | ---- | |
- | ==== 6. GitHub 인증 실패 ==== | + | ==== 1) GitHub 인증 실패 ==== |
**문제 상황:** | **문제 상황:** | ||
- | <code> | + | |
+ | <file> | ||
remote: Support for password authentication was removed on August 13, 2021. | remote: Support for password authentication was removed on August 13, 2021. | ||
remote: Please use a personal access token instead. | remote: Please use a personal access token instead. | ||
fatal: Authentication failed for ' | fatal: Authentication failed for ' | ||
- | </code> | + | </file> |
- | **원인:** GitHub가 2021년부터 비밀번호 인증을 중단함 | + | **원인:** GitHub가 2021년부터 비밀번호 인증 중단함 |
**해결 방법:** | **해결 방법:** | ||
줄 265: | 줄 291: | ||
**1단계: 토큰 생성** | **1단계: 토큰 생성** | ||
- | 1. GitHub 로그인 → Settings → Developer settings → Personal access tokens | + | - GitHub 로그인 → Settings → Developer settings → Personal access tokens |
- | 2. "Generate new token (classic)" | + | - '' |
- | 3. 토큰 이름 입력 (예: "내 컴퓨터") | + | |
- | 4. 권한 선택 (repo 체크) | + | |
- | 5. "Generate token" | + | - '' |
- | 6. 생성된 토큰 복사 (한 번만 보여줌!) | + | |
**2단계: 토큰 사용** | **2단계: 토큰 사용** | ||
- | <code bash> | + | |
+ | <file bash> | ||
# Git 명령어 실행 시 비밀번호 대신 토큰 입력 | # Git 명령어 실행 시 비밀번호 대신 토큰 입력 | ||
git push origin main | git push origin main | ||
# Username: your-github-username | # Username: your-github-username | ||
# Password: [여기에 토큰 입력] | # Password: [여기에 토큰 입력] | ||
- | </code> | + | </file> |
**방법 2: SSH 키 사용 (더 안전)** | **방법 2: SSH 키 사용 (더 안전)** | ||
**1단계: SSH 키 생성** | **1단계: SSH 키 생성** | ||
- | <code bash> | + | |
+ | <file bash> | ||
# SSH 키 생성 | # SSH 키 생성 | ||
- | ssh-keygen -t ed25519 -C "[email protected]" | + | ssh-keygen -t ed25519 -C '' |
# 기본 설정으로 Enter 3번 입력 | # 기본 설정으로 Enter 3번 입력 | ||
# 키 파일 위치: ~/ | # 키 파일 위치: ~/ | ||
- | </code> | + | </file> |
+ | |||
+ | **2단계: SSH 키 GitHub에 등록** | ||
- | **2단계: SSH 키를 GitHub에 등록** | + | <file bash> |
- | <code bash> | + | |
# 공개 키 내용 복사 | # 공개 키 내용 복사 | ||
cat ~/ | cat ~/ | ||
- | </code> | + | </file> |
- | 1. GitHub → Settings → SSH and GPG keys | + | - GitHub → Settings → SSH and GPG keys |
- | 2. "New SSH key" | + | - '' |
- | 3. 제목 입력하고 키 내용 붙여넣기 | + | |
- | 4. "Add SSH key" | + | - '' |
**3단계: 원격 저장소 URL 변경** | **3단계: 원격 저장소 URL 변경** | ||
- | <code bash> | + | |
+ | <file bash> | ||
# HTTPS에서 SSH로 변경 | # HTTPS에서 SSH로 변경 | ||
git remote set-url origin [email protected]: | git remote set-url origin [email protected]: | ||
줄 309: | 줄 339: | ||
# 확인 | # 확인 | ||
git remote -v | git remote -v | ||
- | </code> | + | </file> |
- | + | ===== 4. 🗂️ 파일 관리 문제 ===== | |
- | ===== 🗂️ 파일 관리 문제 ===== | + | ---- |
- | + | ==== 1) 파일을 실수로 삭제했을 때 ==== | |
- | ==== 7. 파일을 실수로 삭제했을 때 ==== | + | |
**문제 상황:** | **문제 상황:** | ||
- | <code bash> | + | |
+ | <file bash> | ||
rm important-file.txt | rm important-file.txt | ||
- | </code> | + | </file> |
**해결 방법:** | **해결 방법:** | ||
**방법 1: 아직 커밋하지 않은 경우** | **방법 1: 아직 커밋하지 않은 경우** | ||
- | <code bash> | + | |
+ | <file bash> | ||
# 마지막 커밋 상태로 파일 복원 | # 마지막 커밋 상태로 파일 복원 | ||
git checkout -- important-file.txt | git checkout -- important-file.txt | ||
줄 329: | 줄 360: | ||
# 또는 특정 커밋에서 복원 | # 또는 특정 커밋에서 복원 | ||
git checkout HEAD -- important-file.txt | git checkout HEAD -- important-file.txt | ||
- | </code> | + | </file> |
**방법 2: 이미 삭제를 커밋한 경우** | **방법 2: 이미 삭제를 커밋한 경우** | ||
- | <code bash> | + | |
+ | <file bash> | ||
# 파일이 삭제된 커밋 찾기 | # 파일이 삭제된 커밋 찾기 | ||
git log --oneline -- important-file.txt | git log --oneline -- important-file.txt | ||
줄 342: | 줄 374: | ||
git add important-file.txt | git add important-file.txt | ||
git commit -m " | git commit -m " | ||
- | </code> | + | </file> |
- | ==== 8. 큰 파일 업로드 오류 ==== | + | ---- |
+ | ==== 2) 큰 파일 업로드 오류 ==== | ||
**문제 상황:** | **문제 상황:** | ||
- | <code> | + | |
+ | <file> | ||
remote: error: File large-file.zip is 120.00 MB; this exceeds GitHub' | remote: error: File large-file.zip is 120.00 MB; this exceeds GitHub' | ||
remote: error: See https:// | remote: error: See https:// | ||
- | </code> | + | </file> |
**원인:** GitHub는 100MB 이상의 파일 업로드를 제한함 | **원인:** GitHub는 100MB 이상의 파일 업로드를 제한함 | ||
줄 357: | 줄 391: | ||
**방법 1: 파일 제거** | **방법 1: 파일 제거** | ||
- | <code bash> | + | |
+ | <file bash> | ||
# 큰 파일을 .gitignore에 추가 | # 큰 파일을 .gitignore에 추가 | ||
echo " | echo " | ||
줄 368: | 줄 403: | ||
git commit -m "큰 파일 제거 및 .gitignore 추가" | git commit -m "큰 파일 제거 및 .gitignore 추가" | ||
git push origin main | git push origin main | ||
- | </code> | + | </file> |
**방법 2: Git LFS 사용** | **방법 2: Git LFS 사용** | ||
- | <code bash> | + | |
+ | <file bash> | ||
# Git LFS 설치 (한 번만) | # Git LFS 설치 (한 번만) | ||
git lfs install | git lfs install | ||
줄 386: | 줄 422: | ||
git commit -m "큰 파일 추가 (LFS 사용)" | git commit -m "큰 파일 추가 (LFS 사용)" | ||
git push origin main | git push origin main | ||
- | </code> | + | </file> |
- | ===== 🔄 히스토리 관리 문제 ===== | + | ===== 5. 🔄 히스토리 관리 문제 ===== |
- | + | ---- | |
- | ==== 9. 커밋을 너무 많이 만들었을 때 ==== | + | ==== 1) 커밋을 너무 많이 만들었을 때 ==== |
**문제 상황:** | **문제 상황:** | ||
- | <code bash> | + | |
+ | <file bash> | ||
git log --oneline | git log --oneline | ||
# a1b2c3d 오타 수정 | # a1b2c3d 오타 수정 | ||
줄 399: | 줄 436: | ||
# i7j8k9l 또또 오타 수정 | # i7j8k9l 또또 오타 수정 | ||
# m1n2o3p 기능 추가 | # m1n2o3p 기능 추가 | ||
- | </code> | + | </file> |
**해결 방법: 여러 커밋을 하나로 합치기 (Squash)** | **해결 방법: 여러 커밋을 하나로 합치기 (Squash)** | ||
**방법 1: Interactive Rebase 사용** | **방법 1: Interactive Rebase 사용** | ||
- | <code bash> | + | |
+ | <file bash> | ||
# 최근 4개 커밋을 하나로 합치기 | # 최근 4개 커밋을 하나로 합치기 | ||
git rebase -i HEAD~4 | git rebase -i HEAD~4 | ||
줄 416: | 줄 454: | ||
# 저장하고 닫으면 커밋 메시지 편집 화면이 나타남 | # 저장하고 닫으면 커밋 메시지 편집 화면이 나타남 | ||
# 원하는 메시지로 수정 후 저장 | # 원하는 메시지로 수정 후 저장 | ||
- | </code> | + | </file> |
**방법 2: Soft Reset 사용** | **방법 2: Soft Reset 사용** | ||
- | <code bash> | + | |
+ | <file bash> | ||
# 최근 4개 커밋을 취소하되 변경사항은 유지 | # 최근 4개 커밋을 취소하되 변경사항은 유지 | ||
git reset --soft HEAD~4 | git reset --soft HEAD~4 | ||
줄 425: | 줄 464: | ||
# 모든 변경사항을 하나의 커밋으로 만들기 | # 모든 변경사항을 하나의 커밋으로 만들기 | ||
git commit -m " | git commit -m " | ||
- | </code> | + | </file> |
**⚠️ 주의사항: | **⚠️ 주의사항: | ||
- | - 이미 push한 커밋은 수정하지 마세요 (팀 작업 시) | + | |
- | - 혼자 작업할 때만 사용하세요 | + | - 혼자 작업할 때만 사용하세요 |
- | ==== 10. 잘못된 브랜치에서 작업했을 때 ==== | + | ---- |
+ | ==== 2) 잘못된 브랜치에서 작업했을 때 ==== | ||
**문제 상황:** | **문제 상황:** | ||
- | <code bash> | + | |
+ | <file bash> | ||
# main 브랜치에서 작업했는데 feature 브랜치에서 했어야 했을 때 | # main 브랜치에서 작업했는데 feature 브랜치에서 했어야 했을 때 | ||
git branch | git branch | ||
줄 440: | 줄 481: | ||
git log --oneline -3 | git log --oneline -3 | ||
# a1b2c3d 새 기능 추가 | # a1b2c3d 새 기능 추가 | ||
- | </code> | + | </file> |
**해결 방법:** | **해결 방법:** | ||
**1단계: 새 브랜치 생성** | **1단계: 새 브랜치 생성** | ||
- | <code bash> | + | |
+ | <file bash> | ||
# 현재 위치에서 새 브랜치 생성 | # 현재 위치에서 새 브랜치 생성 | ||
git branch feature-new-function | git branch feature-new-function | ||
줄 451: | 줄 493: | ||
# 또는 생성과 동시에 이동 | # 또는 생성과 동시에 이동 | ||
git checkout -b feature-new-function | git checkout -b feature-new-function | ||
- | </code> | + | </file> |
**2단계: main 브랜치 되돌리기** | **2단계: main 브랜치 되돌리기** | ||
- | <code bash> | + | |
+ | <file bash> | ||
# main 브랜치로 이동 | # main 브랜치로 이동 | ||
git checkout main | git checkout main | ||
줄 463: | 줄 506: | ||
# 확인 | # 확인 | ||
git log --oneline -3 | git log --oneline -3 | ||
- | </code> | + | </file> |
**3단계: 새 브랜치에서 작업 계속** | **3단계: 새 브랜치에서 작업 계속** | ||
- | <code bash> | + | |
+ | <file bash> | ||
# 새 브랜치로 이동 | # 새 브랜치로 이동 | ||
git checkout feature-new-function | git checkout feature-new-function | ||
# 작업 계속... | # 작업 계속... | ||
- | </code> | + | </file> |
- | ===== 🛠️ 고급 복구 기법 ===== | + | ===== 6. 🛠️ 고급 복구 기법 ===== |
- | + | ---- | |
- | ==== 11. 실수로 브랜치를 삭제했을 때 ==== | + | ==== 1) 실수로 브랜치를 삭제했을 때 ==== |
**문제 상황:** | **문제 상황:** | ||
- | <code bash> | + | |
+ | <file bash> | ||
git branch -D feature-important | git branch -D feature-important | ||
- | </code> | + | </file> |
**해결 방법:** | **해결 방법:** | ||
**1단계: 삭제된 브랜치의 커밋 해시 찾기** | **1단계: 삭제된 브랜치의 커밋 해시 찾기** | ||
- | <code bash> | + | |
+ | <file bash> | ||
# reflog에서 삭제된 브랜치의 마지막 커밋 찾기 | # reflog에서 삭제된 브랜치의 마지막 커밋 찾기 | ||
git reflog | git reflog | ||
줄 493: | 줄 539: | ||
# e4f5g6h HEAD@{1}: commit: 중요한 기능 완성 | # e4f5g6h HEAD@{1}: commit: 중요한 기능 완성 | ||
# ... | # ... | ||
- | </code> | + | </file> |
**2단계: 브랜치 복원** | **2단계: 브랜치 복원** | ||
- | <code bash> | + | |
+ | <file bash> | ||
# 삭제된 브랜치 복원 | # 삭제된 브랜치 복원 | ||
git checkout -b feature-important e4f5g6h | git checkout -b feature-important e4f5g6h | ||
줄 502: | 줄 549: | ||
# 확인 | # 확인 | ||
git log --oneline | git log --oneline | ||
- | </code> | + | </file> |
- | ==== 12. 잘못된 파일 내용을 커밋했을 때 ==== | + | ---- |
+ | ==== 2) 잘못된 파일 내용을 커밋했을 때 ==== | ||
**문제 상황:** | **문제 상황:** | ||
- | <code bash> | + | |
+ | <file bash> | ||
# 중요한 파일에 잘못된 내용을 작성하고 커밋함 | # 중요한 파일에 잘못된 내용을 작성하고 커밋함 | ||
git log --oneline -1 | git log --oneline -1 | ||
# a1b2c3d 설정 파일 업데이트 | # a1b2c3d 설정 파일 업데이트 | ||
- | </code> | + | </file> |
**해결 방법:** | **해결 방법:** | ||
**방법 1: 특정 파일만 이전 상태로 복원** | **방법 1: 특정 파일만 이전 상태로 복원** | ||
- | <code bash> | + | |
+ | <file bash> | ||
# 2번 전 커밋에서 해당 파일만 복원 | # 2번 전 커밋에서 해당 파일만 복원 | ||
git checkout HEAD~2 -- config.json | git checkout HEAD~2 -- config.json | ||
줄 523: | 줄 573: | ||
git add config.json | git add config.json | ||
git commit -m " | git commit -m " | ||
- | </code> | + | </file> |
**방법 2: 커밋 되돌리기** | **방법 2: 커밋 되돌리기** | ||
- | <code bash> | + | |
+ | <file bash> | ||
# 잘못된 커밋을 되돌리는 새 커밋 생성 | # 잘못된 커밋을 되돌리는 새 커밋 생성 | ||
git revert HEAD | git revert HEAD | ||
줄 532: | 줄 583: | ||
# 또는 특정 커밋 되돌리기 | # 또는 특정 커밋 되돌리기 | ||
git revert a1b2c3d | git revert a1b2c3d | ||
- | </code> | + | </file> |
- | ===== 🔍 문제 진단 도구 ===== | + | ===== 7. 🔍 문제 진단 도구 ===== |
- | + | ---- | |
- | ==== 유용한 명령어들 ==== | + | ==== 1) 유용한 명령어들 ==== |
**현재 상태 확인** | **현재 상태 확인** | ||
- | <code bash> | + | |
+ | <file bash> | ||
# 기본 상태 확인 | # 기본 상태 확인 | ||
git status | git status | ||
줄 548: | 줄 600: | ||
# 간단한 상태 확인 | # 간단한 상태 확인 | ||
git status -s | git status -s | ||
- | </code> | + | </file> |
**히스토리 확인** | **히스토리 확인** | ||
- | <code bash> | + | |
+ | <file bash> | ||
# 커밋 히스토리 | # 커밋 히스토리 | ||
git log --oneline --graph | git log --oneline --graph | ||
줄 560: | 줄 613: | ||
# 모든 참조 히스토리 (삭제된 커밋도 포함) | # 모든 참조 히스토리 (삭제된 커밋도 포함) | ||
git reflog | git reflog | ||
- | </code> | + | </file> |
**차이점 확인** | **차이점 확인** | ||
- | <code bash> | + | |
+ | <file bash> | ||
# 작업 디렉토리와 스테이징 영역 차이 | # 작업 디렉토리와 스테이징 영역 차이 | ||
git diff | git diff | ||
줄 572: | 줄 626: | ||
# 두 커밋 간 차이 | # 두 커밋 간 차이 | ||
git diff commit1 commit2 | git diff commit1 commit2 | ||
- | </code> | + | </file> |
- | ===== 🆘 응급 상황 대처법 ===== | + | ===== 8. 🆘 응급 상황 대처법 ===== |
- | + | ---- | |
- | ==== " | + | ==== 1) " |
**상황:** 무엇을 했는지 모르겠는데 모든 것이 이상해졌을 때 | **상황:** 무엇을 했는지 모르겠는데 모든 것이 이상해졌을 때 | ||
줄 583: | 줄 637: | ||
**1단계: 당황하지 말고 현재 상태 파악** | **1단계: 당황하지 말고 현재 상태 파악** | ||
- | <code bash> | + | |
+ | <file bash> | ||
# 현재 상태 확인 | # 현재 상태 확인 | ||
git status | git status | ||
줄 595: | 줄 650: | ||
# 모든 참조 히스토리 확인 | # 모든 참조 히스토리 확인 | ||
git reflog | git reflog | ||
- | </code> | + | </file> |
**2단계: 안전한 상태로 복원** | **2단계: 안전한 상태로 복원** | ||
- | <code bash> | + | |
+ | <file bash> | ||
# 작업 디렉토리의 모든 변경사항 버리기 | # 작업 디렉토리의 모든 변경사항 버리기 | ||
git checkout -- . | git checkout -- . | ||
줄 607: | 줄 663: | ||
# 마지막 커밋 상태로 완전히 복원 | # 마지막 커밋 상태로 완전히 복원 | ||
git reset --hard HEAD | git reset --hard HEAD | ||
- | </code> | + | </file> |
**3단계: 필요시 특정 시점으로 복원** | **3단계: 필요시 특정 시점으로 복원** | ||
- | <code bash> | + | |
+ | <file bash> | ||
# 특정 커밋으로 완전히 되돌리기 (주의!) | # 특정 커밋으로 완전히 되돌리기 (주의!) | ||
git reset --hard commit-hash | git reset --hard commit-hash | ||
줄 616: | 줄 673: | ||
# 또는 안전한 되돌리기 | # 또는 안전한 되돌리기 | ||
git revert commit-hash | git revert commit-hash | ||
- | </code> | + | </file> |
- | ===== 📚 도움 받는 방법 ===== | + | ===== 9. 📚 도움 받는 방법 ===== |
- | + | ---- | |
- | ==== Git 내장 도움말 ==== | + | ==== 1) Git 내장 도움말 ==== |
- | <code bash> | + | <file bash> |
# 명령어 도움말 보기 | # 명령어 도움말 보기 | ||
git help status | git help status | ||
줄 631: | 줄 688: | ||
git status --help | git status --help | ||
git commit --help | git commit --help | ||
- | </code> | + | </file> |
- | ==== 온라인 리소스 ==== | + | ---- |
+ | ==== 2) 온라인 리소스 ==== | ||
**공식 문서:** | **공식 문서:** | ||
- | - Git 공식 문서: https:// | + | |
- | - GitHub 도움말: https:// | + | - GitHub 도움말: https:// |
**커뮤니티: | **커뮤니티: | ||
- | - Stack Overflow: | + | |
- | - GitHub Community: https:// | + | - GitHub Community: https:// |
**한국어 자료:** | **한국어 자료:** | ||
- | - 생활코딩 Git 강의 | + | |
- | - Git 공식 문서 한국어 번역 | + | - Git 공식 문서 한국어 번역 |
- | ==== 오류 메시지 검색 팁 ==== | + | ---- |
+ | ==== 3) 오류 메시지 검색 팁 ==== | ||
- | <code bash> | + | <file bash> |
# 오류 메시지를 그대로 구글에 검색 | # 오류 메시지를 그대로 구글에 검색 | ||
" | " | ||
줄 658: | 줄 717: | ||
# 해결 방법도 함께 검색 | # 해결 방법도 함께 검색 | ||
git merge conflict how to resolve | git merge conflict how to resolve | ||
- | </code> | + | </file> |
- | ===== 💡 문제 예방 팁 ===== | + | ===== 10. 💡 문제 예방 팁 ===== |
- | + | ---- | |
- | ==== 좋은 습관 기르기 ==== | + | ==== 1) 좋은 습관 기르기 ==== |
**1. 자주 상태 확인하기** | **1. 자주 상태 확인하기** | ||
- | <code bash> | + | |
+ | <file bash> | ||
# 명령어 실행 전후로 항상 확인 | # 명령어 실행 전후로 항상 확인 | ||
git status | git status | ||
- | </code> | + | </file> |
**2. 작은 단위로 자주 커밋하기** | **2. 작은 단위로 자주 커밋하기** | ||
- | <code bash> | + | |
+ | <file bash> | ||
# 큰 변경사항을 한 번에 커밋하지 말고 작은 단위로 | # 큰 변경사항을 한 번에 커밋하지 말고 작은 단위로 | ||
git add specific-file.txt | git add specific-file.txt | ||
git commit -m " | git commit -m " | ||
- | </code> | + | </file> |
**3. 의미있는 커밋 메시지 작성하기** | **3. 의미있는 커밋 메시지 작성하기** | ||
- | <code bash> | + | |
+ | <file bash> | ||
# 나중에 봐도 이해할 수 있는 메시지 | # 나중에 봐도 이해할 수 있는 메시지 | ||
git commit -m " | git commit -m " | ||
- | </code> | + | </file> |
**4. 중요한 작업 전 백업하기** | **4. 중요한 작업 전 백업하기** | ||
- | <code bash> | + | |
+ | <file bash> | ||
# 중요한 브랜치 백업 | # 중요한 브랜치 백업 | ||
git branch backup-main main | git branch backup-main main | ||
줄 690: | 줄 753: | ||
# 또는 태그로 백업 | # 또는 태그로 백업 | ||
git tag backup-before-merge | git tag backup-before-merge | ||
- | </code> | + | </file> |
**5. .gitignore 파일 활용하기** | **5. .gitignore 파일 활용하기** | ||
- | <code bash> | + | |
+ | <file bash> | ||
# 프로젝트 시작 시 .gitignore 설정 | # 프로젝트 시작 시 .gitignore 설정 | ||
echo " | echo " | ||
echo " | echo " | ||
echo " | echo " | ||
- | </code> | + | </file> |
- | ===== 🎓 마무리 ===== | + | ===== 11. 🎓 마무리 ===== |
**축하합니다! 🎉 이제 Git/GitHub 문제 해결 능력을 갖추셨습니다!** | **축하합니다! 🎉 이제 Git/GitHub 문제 해결 능력을 갖추셨습니다!** | ||
**기억해야 할 핵심 원칙:** | **기억해야 할 핵심 원칙:** | ||
- | - 🔒 **Git은 안전합니다**: | + | |
- | - 📖 **오류 메시지를 읽어보세요**: | + | - 📖 **오류 메시지를 읽어보세요**: |
- | - 🔍 **git status를 자주 사용하세요**: 현재 상태 파악이 중요 | + | - 🔍 '' |
- | - 🤝 **도움을 요청하세요**: | + | - 🤝 **도움을 요청하세요**: |
**문제가 생겼을 때:** | **문제가 생겼을 때:** | ||
- | 1. 당황하지 말고 현재 상태 파악 | + | - 당황하지 말고 현재 상태 파악 |
- | 2. 이 가이드에서 비슷한 상황 찾기 | + | |
- | 3. 단계별로 차근차근 해결 | + | |
- | 4. 해결되지 않으면 온라인 커뮤니티에 질문 | + | |
**예방이 최선입니다: | **예방이 최선입니다: | ||
- | - 자주 커밋하고 push하기 | + | |
- | - 중요한 작업 전 백업하기 | + | - 중요한 작업 전 백업하기 |
- | - .gitignore 파일 활용하기 | + | - %% .gitignore |
- | - 의미있는 커밋 메시지 작성하기 | + | - 의미있는 커밋 메시지 작성하기 |
**이제 고급 팁을 배워서 더 효율적으로 Git을 사용해보세요!** 🌟 | **이제 고급 팁을 배워서 더 효율적으로 Git을 사용해보세요!** 🌟 | ||
줄 726: | 줄 790: | ||
---- | ---- | ||
- | **이전:** [[wiki: | + | **이전:** [[wiki: |
wiki/it/github/troubleshooting.1753857794.txt.gz · 마지막으로 수정됨: 저자 127.0.0.1