다른 명령
| (같은 사용자의 중간 판 11개는 보이지 않습니다) | |||
| 3번째 줄: | 3번째 줄: | ||
=== 먼저 알아야 할 핵심 개념 === | === 먼저 알아야 할 핵심 개념 === | ||
:<source> | |||
<source> | |||
작업 디렉터리 → 스테이징 영역 → 로컬 저장소 → 원격 저장소 | 작업 디렉터리 → 스테이징 영역 → 로컬 저장소 → 원격 저장소 | ||
| 12번째 줄: | 11번째 줄: | ||
</source> | </source> | ||
{| class="tb_gray" | :{| class="tb_gray" | ||
|+ 기본 개념 | |+ [기본 개념] | ||
|- | |- | ||
! 영역 !! 설명 | ! 영역 !! 설명 | ||
| 102번째 줄: | 101번째 줄: | ||
</source> | </source> | ||
- 커밋 메시지는 "무엇을, 왜 바꿨는지" 알 수 있게 작성합니다. | :- 커밋 메시지는 "무엇을, 왜 바꿨는지" 알 수 있게 작성합니다. | ||
- `-a`는 새 파일(untracked)은 포함하지 않습니다. | :- `-a`는 새 파일(untracked)은 포함하지 않습니다. | ||
- `--amend`는 커밋을 새로 만들기 때문에 **이미 push한 커밋에는 쓰지 않는 것이 좋습니다.** | :- `--amend`는 커밋을 새로 만들기 때문에 **이미 push한 커밋에는 쓰지 않는 것이 좋습니다.** | ||
---- | ---- | ||
| 228번째 줄: | 227번째 줄: | ||
**충돌(conflict) 발생 시:** | **충돌(conflict) 발생 시:** | ||
1. 충돌 파일을 열면 아래와 같은 표시가 있습니다. | 1. 충돌 파일을 열면 아래와 같은 표시가 있습니다. | ||
< | <source> | ||
<<<<<<< HEAD | <<<<<<< HEAD | ||
| 264번째 줄: | 263번째 줄: | ||
| 수정한 파일을 마지막 커밋 상태로 되돌리기 | | 수정한 파일을 마지막 커밋 상태로 되돌리기 | ||
| | | <source>git restore 파일</source> | ||
|- | |- | ||
| | | git add`한 것을 취소 (수정 내용은 유지) | ||
| | | <source>git restore --staged 파일</source> | ||
|- | |- | ||
| 직전 커밋 취소 (변경사항은 남김) | | 직전 커밋 취소 (변경사항은 남김) | ||
| | | <source>git reset --soft HEAD~1</source> | ||
|- | |- | ||
| 직전 커밋 취소 + 스테이징도 취소 | | 직전 커밋 취소 + 스테이징도 취소 | ||
| | | <source>git reset HEAD~1</source> | ||
|- | |- | ||
| 직전 커밋 취소 + '''변경사항까지 삭제''' | | 직전 커밋 취소 + '''변경사항까지 삭제''' | ||
| | | <source>git reset --hard HEAD~1</source> | ||
|- | |- | ||
| 이미 push한 커밋을 안전하게 취소 | | 이미 push한 커밋을 안전하게 취소 | ||
| | | <source>git revert 커밋ID</source> | ||
|} | |} | ||
| 346번째 줄: | 345번째 줄: | ||
프로젝트 루트에 `.gitignore` 파일을 만들고 작성합니다. | 프로젝트 루트에 `.gitignore` 파일을 만들고 작성합니다. | ||
< | <source> | ||
.DS_Store | .DS_Store | ||
| 525번째 줄: | 524번째 줄: | ||
{{요약 | {{요약 | ||
|요약=무한 반복 | |요약=무한 반복 | ||
<source> | |||
git add . | git add . | ||
git commit -m "수정 내용 적기" | git commit -m "수정 내용 적기" | ||
git push origin main | git push origin main | ||
</source> | |||
}} | }} | ||
2026년 10월 21일 (수) 22:57 기준 최신판
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. 충돌 파일을 열면 아래와 같은 표시가 있습니다.
<<<<<<< HEAD 내 코드 ======= 상대 코드 >>>>>>> feature-login
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` 파일을 만들고 작성합니다.
.DS_Store node_modules/ *.log .env build/
이미 커밋된 파일을 추적에서 제외하려면:
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에 레파지토리 만들기
1단계: 원하는 위치에 디렉토리(폴더) 만들기
먼저 프로젝트를 진행할 폴더를 만듭니다. 가장 찾기 쉬운 바탕화면(Desktop)을 기준으로 진행해 볼게요. bash
- 1. 바탕화면 경로로 이동합니다.
cd ~/Desktop
- 2. 'my-project'라는 이름의 디렉토리(폴더)를 생성합니다.
mkdir my-project
- 3. 방금 만든 'my-project' 폴더 안으로 이동합니다.
cd my-project 코드를 사용할 때는 주의가 필요합니다. • 초보자 팁: mkdir은 Make Directory(폴더 생성)의 줄임말이고, cd는 Change Directory(폴더 이동)의 줄임말입니다. 이후 모든 작업은 이 폴더 안에서 진행되어야 합니다.
2단계: 파일 생성하기
폴더 안에 작업할 파일(예: PlantUML 텍스트 파일이나 메모장 파일)을 만듭니다. 터미널 명령어로 직접 만들 수도 있고, VS Code 같은 에디터로 만들어도 됩니다. 방법 A. 터미널 명령어로 바로 만들기 bash
- 'diagram.puml' 이라는 텍스트 파일을 새로 만듭니다.
touch diagram.puml 코드를 사용할 때는 주의가 필요합니다. • touch는 빈 파일을 생성하는 명령어입니다. 파일 확장자는 자유롭게 변경해도 됩니다 (예: index.html, test.txt 등). 방법 B. 에디터(VS Code)로 열어서 만들기 (추천) 만약 맥북에 VS Code(Visual Studio Code)가 설치되어 있다면, 터미널에 아래 명령어를 입력해 보세요. 방금 만든 폴더가 VS Code 에디터로 즉시 열립니다. bash code . 코드를 사용할 때는 주의가 필요합니다. • 에디터가 열리면 왼쪽 탐색기창에서 마우스 우클릭을 해 자유롭게 파일을 만드셔도 됩니다.
3단계: 내 폴더에 Git 시작하기 (Init)
이제 이 폴더가 내가 수정하는 파일들을 추적할 수 있도록 Git 저장소로 변신시킵니다. bash
- 이 폴더를 Git 저장소로 초기화합니다.
git init 코드를 사용할 때는 주의가 필요합니다. • 이제 터미널 창을 보면 폴더 이름 옆에 (main) 또는 (master)라고 연하게 표시가 생깁니다. (Git이 정상 작동 중이라는 신호입니다.)
4단계: 첫 파일 저장하기 (Add & Commit)
2단계에서 만든 파일들을 내 맥북의 Git에 첫 기록으로 남겨둡니다. bash
- 1. 새로 만든 파일들을 장바구니에 담기
git add .
- 2. 첫 저장 기록 남기기
git commit -m "내 맥북에서 첫 프로젝트 시작" 코드를 사용할 때는 주의가 필요합니다.
5단계: (선택) GitHub 온라인 저장소와 연결하기
이렇게 내 맥북에서 만든 폴더를 GitHub 웹사이트에 올리고 싶다면, GitHub에서 빈 레포지토리를 하나 만든 뒤 아래 두 줄을 순서대로 터미널에 복사-붙여넣기 하시면 됩니다. bash
- 1. GitHub 온라인 주소 연결하기
git remote add origin https://github.com
- 2. 내 맥북의 기록을 GitHub로 밀어 올리기
git push -u origin main
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