다른 명령
GitHub 명령어
- Git 필수 명령어 상세 설명
먼저 알아야 할 핵심 개념
작업 디렉터리 → 스테이징 영역 → 로컬 저장소 → 원격 저장소 (Working Dir) (Staging/Index) (Local Repo) (Remote) 파일 수정 git add git commit git push
| 영역 | 설명 |
|---|---|
| 작업 디렉터리 | 실제 파일을 수정하는 곳 (내 PC) |
| 스테이징 영역 | 다음 커밋에 포함할 변경사항을 골라 담아 두는 곳 (임시 저장 공간) |
| 로컬 저장소 | 내 컴퓨터에 저장된 커밋 기록 (`.git` 폴더) |
| 원격 저장소 | GitHub, GitLab 등 서버에 있는 저장소 |
설정 및 시작
git config
- 용도: 사용자 정보와 Git 동작 방식을 설정합니다. 커밋에 작성자로 기록되므로 처음에 반드시 해야 합니다.
git config --global user.name "홍길동" git config --global user.email "hong@example.com" git config --global init.defaultBranch main # 기본 브랜치 이름을 main으로 git config --global core.editor "nano" # 기본 편집기 지정 git config --list # 현재 설정 확인
- `--global`: 내 계정 전체에 적용 - 옵션 없이 쓰면 현재 저장소에만 적용됩니다.
git init
- 용도: 현재 폴더를 새 Git 저장소로 만듭니다. `.git` 숨김 폴더가 생성됩니다.
git init
git clone
- 용도: 원격 저장소 전체(파일 + 전체 커밋 기록)를 내 컴퓨터로 복사합니다.
git clone https://github.com/user/repo.git git clone https://github.com/user/repo.git myfolder # 폴더 이름 지정 git clone --depth 1 https://github.com/user/repo.git # 최신 커밋만 (빠름)
변경사항 기록 (가장 많이 쓰는 명령어)
git status
- 용도: 현재 상태를 확인합니다. 어떤 파일이 수정됐는지, 스테이징됐는지, 추적되지 않는지 보여 줍니다. 습관적으로 자주 입력하는 것이 좋습니다.
git status git status -s # 짧게 보기
출력 의미:
- `Untracked files`: Git이 아직 모르는 새 파일
- `Changes not staged for commit`: 수정됐지만 `add` 하지 않은 파일
- `Changes to be committed`: 커밋 준비가 된 파일
git add
- 용도: 변경사항을 스테이징 영역에 올립니다. 커밋할 내용을 선택하는 단계입니다.
git add file.txt # 특정 파일 git add src/ # 특정 폴더 git add . # 현재 폴더의 모든 변경사항 git add -p # 변경 내용을 조각(hunk) 단위로 선택
`git add -p`를 쓰면 한 파일 안에서도 원하는 부분만 골라 커밋할 수 있습니다.
git commit
- 용도: 스테이징된 변경사항을 하나의 기록(스냅샷)으로 저장합니다.
git commit -m "로그인 기능 추가" git commit -am "버그 수정" # 이미 추적 중인 파일을 add + commit 한 번에 git commit --amend -m "새 메시지" # 직전 커밋 수정 (메시지 변경 or 파일 추가)
- 커밋 메시지는 "무엇을, 왜 바꿨는지" 알 수 있게 작성합니다. - `-a`는 새 파일(untracked)은 포함하지 않습니다. - `--amend`는 커밋을 새로 만들기 때문에 **이미 push한 커밋에는 쓰지 않는 것이 좋습니다.**
확인 및 비교
git log
- 용도: 커밋 기록을 봅니다.
git log git log --oneline # 한 줄씩 요약 git log --oneline --graph --all # 브랜치 구조를 그래프로 git log -p # 각 커밋의 변경 내용 포함 git log -n 5 # 최근 5개만 git log --author="홍길동" git log -- file.txt # 특정 파일의 기록
(`q`를 누르면 종료)
git diff
- 용도: 변경된 내용을 줄 단위로 비교합니다.
git diff # 작업 디렉터리 vs 스테이징 (아직 add 안 한 변경) git diff --staged # 스테이징 vs 마지막 커밋 (커밋될 내용) git diff main feature # 두 브랜치 비교 git diff abc123 def456 # 두 커밋 비교
git show
- 용도: 특정 커밋의 상세 정보와 변경 내용을 봅니다.
git show # 최신 커밋 git show abc1234 # 특정 커밋
원격 저장소 연동
git remote
- 용도: 원격 저장소 주소를 관리합니다.
git remote -v # 등록된 원격 확인 git remote add origin https://github.com/user/repo.git git remote set-url origin 새주소 # 주소 변경
`origin`은 관례적으로 쓰는 기본 원격 이름입니다.
git push
- 용도: 내 로컬 커밋을 원격 저장소에 업로드합니다.
git push origin main git push -u origin main # 최초 1회: 추적 관계 설정 (이후 git push만 입력) git push origin feature-x # 다른 브랜치 올리기
`--force` 옵션은 원격 기록을 덮어써서 **다른 사람의 작업을 날릴 수 있으니** 주의하세요. 꼭 필요하면 `--force-with-lease`가 더 안전합니다.
git fetch
- 용도: 원격의 변경사항을 **가져오기만** 하고 내 작업 파일에는 합치지 않습니다.
git fetch origin
git pull
- 용도: `fetch` + `merge`를 한 번에 합니다. 원격 최신 내용을 내려받아 현재 브랜치에 합칩니다.
git pull origin main git pull --rebase # merge 대신 rebase로 합침 (커밋 기록이 깔끔)
작업 시작 전에 `pull`을 먼저 하면 충돌을 줄일 수 있습니다.
브랜치 (분기 작업)
브랜치는 독립된 작업 공간입니다. 메인 코드를 건드리지 않고 기능 개발이나 실험을 할 수 있습니다.
git branch
git branch # 로컬 브랜치 목록 (현재 브랜치에 * 표시) git branch -a # 원격 브랜치 포함 git branch feature-login # 새 브랜치 생성 (이동은 안 함) git branch -d feature-login # 병합 완료된 브랜치 삭제 git branch -D feature-login # 강제 삭제
git switch` / `git checkout
- 용도: 브랜치를 이동합니다. 최신 Git에서는 `switch`를 권장합니다.
git switch main git switch -c feature-login # 생성 + 이동 # 구방식 git checkout main git checkout -b feature-login
git merge
- 용도: 다른 브랜치의 변경사항을 현재 브랜치로 합칩니다.
git switch main git merge feature-login
- 충돌(conflict) 발생 시:**
1. 충돌 파일을 열면 아래와 같은 표시가 있습니다.
</source>
<<<<<<< HEAD 내 코드 ======= 상대 코드 >>>>>>> feature-login </source>
2. 원하는 내용만 남기고 표시를 지웁니다. 3. `git add 파일` → `git commit` 4. 병합을 취소하려면 `git merge --abort`
git rebase` (심화
- 용도: 내 브랜치의 커밋을 다른 브랜치 최신 지점 위로 옮겨 기록을 일직선으로 만듭니다.
git switch feature-login git rebase main
- 이미 공유(push)한 브랜치에는 사용하지 마세요.** 커밋 기록이 바뀌기 때문입니다.
되돌리기 (실수 복구)
상황별로 명령어가 다릅니다.
| 상황 | 명령어 | |----|----| | 수정한 파일을 마지막 커밋 상태로 되돌리기 | `git restore 파일` | | `git add`한 것을 취소 (수정 내용은 유지) | `git restore --staged 파일` | | 직전 커밋 취소 (변경사항은 남김) | `git reset --soft HEAD~1` | | 직전 커밋 취소 + 스테이징도 취소 | `git reset HEAD~1` | | 직전 커밋 취소 + **변경사항까지 삭제** | `git reset --hard HEAD~1` | | 이미 push한 커밋을 안전하게 취소 | `git revert 커밋ID` |
git restore
git restore file.txt # 수정 내용 폐기 (복구 불가!) git restore --staged file.txt # add 취소
git reset
- 용도: 브랜치의 위치를 과거 커밋으로 되돌립니다.
git reset --soft HEAD~1 # 커밋만 취소, 변경사항은 스테이징에 유지 git reset --mixed HEAD~1 # (기본값) 커밋, 스테이징 취소, 파일 수정은 유지 git reset --hard HEAD~1 # 모두 삭제. 위험!
`HEAD~1`은 "현재에서 1개 전 커밋"입니다.
git revert
- 용도: 특정 커밋의 변경을 **반대로 적용하는 새 커밋**을 만듭니다. 기록이 보존되므로 이미 push한 커밋을 취소할 때 안전합니다.
git revert abc1234
git reflog
- 용도: HEAD가 움직인 모든 기록을 보여 줍니다. `reset --hard`로 날린 커밋도 여기서 ID를 찾아 복구할 수 있습니다.
git reflog git reset --hard abc1234 # 찾은 시점으로 복구
임시 저장
git stash
- 용도: 작업 중인 변경사항을 잠시 보관해 두고 깨끗한 상태로 만듭니다. 급하게 다른 브랜치로 이동해야 할 때 유용합니다.
git stash # 임시 저장 git stash -u # untracked 파일까지 저장 git stash list # 목록 확인 git stash pop # 가장 최근 것 복원 + 목록에서 삭제 git stash apply # 복원하되 목록에 유지 git stash drop # 삭제
추적 제외: `.gitignore`
- 용도: Git이 추적하지 않을 파일을 지정합니다. (빌드 결과물, 비밀번호/키 파일, macOS의 `.DS_Store` 등)
프로젝트 루트에 `.gitignore` 파일을 만들고 작성합니다. </source>
.DS_Store node_modules/
- .log
.env build/ </source>
이미 커밋된 파일을 추적에서 제외하려면:
git rm --cached 파일명
태그
git tag
- 용도: 특정 커밋에 버전 이름(v1.0 등)을 붙입니다.
git tag v1.0.0 git tag -a v1.0.0 -m "첫 릴리스" # 주석 태그 git push origin v1.0.0 # 태그 업로드 git tag # 목록
추천 작업 흐름 (실무 패턴)
git switch main git pull # 1. 최신 상태로 갱신 git switch -c feature/login # 2. 작업용 브랜치 생성 # ... 코드 수정 ... git status # 3. 상태 확인 git diff # 4. 변경 내용 확인 git add . # 5. 스테이징 git commit -m "로그인 기능 추가" # 6. 커밋 git push -u origin feature/login # 7. 원격에 업로드 # 이후 GitHub에서 Pull Request 생성 → 리뷰 → main에 병합
위험한 명령어 요약
| 명령어 | 위험 이유 | |----|----| | `git reset --hard` | 커밋하지 않은 변경사항이 영구 삭제됨 | | `git push --force` | 원격 기록을 덮어써 팀원 작업이 사라질 수 있음 | | `git restore 파일` | 수정 내용이 복구 불가능하게 사라짐 | | `git clean -fd` | 추적되지 않는 파일/폴더가 삭제됨 | | `git rebase` (공유 브랜치) | 커밋 기록이 바뀌어 협업자와 충돌 |
가장 중요한 10개 요약
git init / clone 시작 git status 상태 확인 git add 스테이징 git commit 기록 git log / diff 확인 git push / pull 원격 동기화 git switch -c 브랜치 생성 git merge 병합 git restore / reset 되돌리기 git stash 임시 저장
PC에 디렉토리 생성후 => git에 레파지토리 만들기
git에 먼저 레파지토리 만든후 PC에 세팅 하기
- github 에서 레파지토리 생성
- github 에서 레파지토리 주소 복사
- PC에 저장할 디렉토리로 이동
- cd ~/Desktop
- 복제(clone) 명령 입력
- git clone 복사한_주소
- 복제 되었는지 확인후 이동
- cd 레포지토리_이름
- 파일 하나 만들어 보기
- echo "Hello PlantUML" > hello.txt
- 변경된 파일 장바구니에 담기#: git add .
- (내가 수정하거나 새로 만든 파일들을 GitHub에 올리기 전에 '장바구니'에 담는 과정)
- add 뒤에 한 칸 띄고 찍은 마침표(.)는 "바뀐 파일 전부 다 장바구니에 담겠다"는 뜻
- 파일에 꼬리포 달기 (메모하기-무슨일인지,무슨파일인지)
- git commit -m "첫 번째 파일 추가"
- -m 뒤의 따옴표 안에는 동료나 미래의 내가 알아볼 수 있도록 수정 내용을 적어줌.
- git commit -m "첫 번째 파일 추가"
- GitHub 온라인에 최종 업로드하기 (Push)
- git push origin main
- • 과거에 생성된 오래된 레포지토리는 기본 가지 이름이 main 대신 master일 수 있습니다.
- • 만약 에러가 난다면 git push origin master를 입력해 보세요.
- • 최초 1회 실행 시 GitHub 로그인(아이디/비밀번호 또는 Personal Access Token)을 요청할 수 있습니다.
git add . git commit -m "수정 내용 적기" git push origin main