메뉴 여닫기
개인 메뉴 토글
로그인하지 않음
만약 지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.

Git 사용법: 두 판 사이의 차이

데브카페
편집 요약 없음
편집 요약 없음
392번째 줄: 392번째 줄:
=== 가장 중요한 10개 요약 ===
=== 가장 중요한 10개 요약 ===


</source>
<source>
 
git init / clone    시작
git init / clone    시작
git status          상태 확인
git status          상태 확인
406번째 줄: 405번째 줄:
</source>
</source>


=== PC에 디렉토리 생성후  => git에 레파지토리 만들기 ===


특정 상황(충돌 해결, GitHub 연동, SSH 키 설정 등)이 궁금하면 알려 주세요.
=== git에 먼저 레파지토리 만든후 PC에 세팅 하기  ===
# github 에서 레파지토리 생성
# github 에서 레파지토리 주소 복사
# PC에 저장할 디렉토리로 이동
#: cd ~/Desktop
# 복제(clone) 명령 입력
#: git clone 복사한_주소
# 복제 되었는지 확인후 이동
#: cd 레포지토리_이름
# 파일 하나 만들어 보기
#: echo "Hello PlantUML" > hello.txt
# 변경된 파일 장바구니에 담기#: git add .
#:* (내가 수정하거나 새로 만든 파일들을 GitHub에 올리기 전에 '장바구니'에 담는 과정)
#:* add 뒤에 한 칸 띄고 찍은 마침표(.)는 "바뀐 파일 전부 다 장바구니에 담겠다"는 뜻
# 파일에 꼬리포 달기 (메모하기-무슨일인지,무슨파일인지)
#:git commit -m "첫 번째 파일 추가"
#:* -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
}}

2026년 10월 21일 (수) 11:48 판

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에 세팅 하기

  1. github 에서 레파지토리 생성
  2. github 에서 레파지토리 주소 복사
  3. PC에 저장할 디렉토리로 이동
    cd ~/Desktop
  4. 복제(clone) 명령 입력
    git clone 복사한_주소
  5. 복제 되었는지 확인후 이동
    cd 레포지토리_이름
  6. 파일 하나 만들어 보기
    echo "Hello PlantUML" > hello.txt
  7. 변경된 파일 장바구니에 담기#: git add .
    • (내가 수정하거나 새로 만든 파일들을 GitHub에 올리기 전에 '장바구니'에 담는 과정)
    • add 뒤에 한 칸 띄고 찍은 마침표(.)는 "바뀐 파일 전부 다 장바구니에 담겠다"는 뜻
  8. 파일에 꼬리포 달기 (메모하기-무슨일인지,무슨파일인지)
    git commit -m "첫 번째 파일 추가"
    • -m 뒤의 따옴표 안에는 동료나 미래의 내가 알아볼 수 있도록 수정 내용을 적어줌.
  9. GitHub 온라인에 최종 업로드하기 (Push)
    git push origin main
    • 과거에 생성된 오래된 레포지토리는 기본 가지 이름이 main 대신 master일 수 있습니다.
    • 만약 에러가 난다면 git push origin master를 입력해 보세요.
    • 최초 1회 실행 시 GitHub 로그인(아이디/비밀번호 또는 Personal Access Token)을 요청할 수 있습니다.
list_alt무한 반복

git add . git commit -m "수정 내용 적기" git push origin main