Git을 사용하여 파일 추가 및 변경하기

Git 명령줄을 사용하여 파일을 추가하고 기존 파일을 변경하고, 아직 필요하지 않은 변경 사항을 숨길 수 있습니다.

Git 리포지터리에 파일 추가

명령줄에서 새 파일을 추가하려면:

  1. 터미널을 엽니다.
  2. 프로젝트 폴더로 이동합니다.

    cd my-project
    
  3. 작업할 Git 브랜치를 선택합니다.
    • 브랜치 만들기: git checkout -b <브랜치이름>
    • 기존 브랜치로 전환: git checkout <브랜치이름>
  4. 추가할 파일을 원하는 디렉터리로 복사합니다.
  5. 파일이 해당 디렉터리에 있는지 확인합니다:
    • Windows: dir
    • 다른 모든 운영 체제: ls

    파일 이름이 표시되어야 합니다.

  6. 파일의 상태를 확인합니다:

    git status
    

    파일 이름이 빨간색으로 표시됩니다. 파일은 파일 시스템에 있지만 아직 Git이 추적하지 않습니다.

  7. Git에 파일을 추적하도록 지시합니다:

    git add <파일이름>
    
  8. 파일의 상태를 다시 확인합니다:

    git status
    

    파일 이름이 초록색으로 표시됩니다. 파일은 로컬에서 Git에 의해 추적되지만 아직 커밋되지 않았거나 푸시되지 않았습니다.

  9. 로컬 프로젝트의 Git 리포지터리에 파일을 커밋합니다:

    git commit -m "여기에 커밋 이유를 설명합니다"
    
  10. 변경 사항을 GitLab에게 푸시합니다. 이 명령에서 origin은 리포지터리의 원격 사본을 나타냅니다. <브랜치이름>을 자신의 브랜치 이름으로 바꿉니다.

    git push origin <브랜치이름>
    
  11. Git이 데이터를 준비하고 압축하여 전송합니다. 원격 리포지터리에서 가져온 줄은 remote:로 시작합니다:

    Enumerating objects: 9, done.
    Counting objects: 100% (9/9), done.
    Delta compression using up to 10 threads
    Compressing objects: 100% (5/5), done.
    Writing objects: 100% (5/5), 1.84 KiB | 1.84 MiB/s, done.
    Total 5 (delta 3), reused 0 (delta 0), pack-reused 0
    remote:
    remote: <브랜치이름>에 대한 Merge Request을 만들려면 방문하세요:
    remote:   https://gitlab.com/gitlab-org/gitlab/-/merge_requests/new?merge_request%5Bsource_branch%5D=<브랜치이름>
    remote:
    To https://gitlab.com/gitlab-org/gitlab.git
     * [new branch]                <브랜치이름> -> <브랜치이름>
    branch '<브랜치이름>' set up to track 'origin/<브랜치이름>'.
    

로컬 리포지터리의 파일이 원격 리포지터리로 복사되었습니다.

Merge Request을 만들려면 원격 리포지터리에서 받은 링크를 복사하여 브라우저 창에 붙여넣으세요.

최종 커밋에 파일 추가

git add <파일이름>
git commit --amend

commit 명령에 --no-edit를 추가하면 커밋 메시지를 편집하지 않습니다.

기존 파일을 변경하기

리포지터리의 파일을 변경하면 Git은 변경 사항을 가장 최근에 체크아웃된 브랜치의 버전에 대해 추적합니다. 이 변경 사항을 브랜치에 검토하고 커밋하여 작업을 GitLab에 푸시할 수 있습니다.

리포지터리 상태 보기

파일이나 폴더를 추가, 변경 또는 삭제하면 Git이 변경 사항을 알고 있습니다. 변경된 파일을 확인하려면:

  • 리포지터리에서 git status를 실행합니다.

    브랜치 이름, 가장 최근 커밋 및 새로 추가되거나 변경된 파일이 표시됩니다. 새 파일은 초록색으로 표시되고, 변경된 파일은 빨간색으로 표시됩니다.

차이 보기

로컬 변경 사항과 가장 최근 브랜치 버전의 차이(또는 diff)를 표시할 수 있습니다. 커밋하기 전에 로컬 변경 사항을 이해하는 데 도움이 되는 diff를 보려면:

  • 리포지터리에서 git diff를 실행합니다.

    특정 브랜치와의 변경 사항을 비교하려면 git diff <브랜치>를 실행하세요.

차이가 표시됩니다:

  • 추가가 포함된 라인은 플러스(+)로 시작하여 초록색으로 표시됩니다.
  • 제거 또는 변경된 라인은 마이너스(-)로 시작하여 빨간색으로 표시됩니다.

만약 diff가 크다면, 기본적으로 diff의 일부만 표시됩니다. Enter로 diff를 진행하고 Q로 터미널로 돌아갈 수 있습니다.

로컬 변경 사항을 추가하고 커밋하기

변경사항을 브랜치에 기록하려면 커밋할 수 있습니다. 커밋은 변경 사항에 대한 정보를 기록하는 코멘트를 포함하고, 일반적으로 브랜치의 새로운 끝이 됩니다.

Git은 움직인, 변경된 또는 삭제한 파일을 자동으로 커밋에 포함시키지 않습니다. 이렇게 함으로써 실수로 임시 디렉터리와 같은 변경 사항이나 파일이 포함되지 않도록 합니다. 커밋에 변경 사항을 포함하려면 git add로 스테이징하세요.

변경 사항을 스테이징하고 커밋하려면:

  1. 리포지터리에서 추가할 각 파일 또는 디렉터리에 대해 git add <파일 이름 또는 경로>를 실행합니다.

    현재 작업 디렉터리의 모든 파일을 스테이징하려면 git add .를 실행합니다.

  2. 스테이징된 파일이 추가되었는지 확인합니다:

    git status
    

    파일이 초록색으로 표시됩니다.

  3. 스테이징된 파일을 커밋합니다:

    git commit -m "<변경 사항을 설명하는 코멘트>"
    

변경 사항이 브랜치에 커밋됩니다.

모든 변경 사항 커밋하기

모든 변경 사항을 스테이징하고 한 번에 커밋할 수 있습니다:

git commit -a -m "<변경 사항을 설명하는 코멘트>"

커밋에 포함하고 싶지 않은 파일이 포함되지 않도록 주의하세요. 변경 사항을 커밋하기 전에 항상 로컬 리포지터리의 상태를 확인하세요.

변경 사항을 GitLab에 전송하기

로컬 변경 사항을 모두 원격 리포지터리에 푸시하려면:

git push <원격> <브랜치의 이름>

예를 들어, 로컬 커밋을 origin 원격의 main 브랜치에 푸시하려면:

git push origin main

가끔 Git은 리포지터리로 푸시할 수 없게 막을 수 있습니다. 이 경우 업데이트를 강제로 실행해야 합니다.

변경 사항 숨기기

git stash를 사용하여 다른 브랜치로 전환하고 아직 커밋할 준비가 되지 않은 변경 사항을 저장하려는 경우 사용하세요.

  • Stash:

    git stash save
    # 또는
    git stash
    # 또는 메시지와 함께
    git stash save "스태시 디렉터리에 표시할 메시지"
    
  • 작업을 계속하기 위해 stash 적용:

    git stash apply
    # 또는 디렉터리에서 특정 stash 적용
    git stash apply stash@{3}
    
  • 스태시를 저장할 때마다 쌓입니다. 모든 스태시를 볼려면 list를 사용하세요:

    git stash list
    # 또는 더 많은 정보를 위해(log 메서드)
    git stash list --stat
    
  • 스택을 매뉴얼으로 지우려면:

    # 최상위 스태시 삭제
    git stash drop
    # 또는
    git stash drop <이름>
    # 모든 기록을 지우려면
    git stash clear
    
  • 적용하고 삭제를 한 번에 실행:

    git stash pop
    
  • 충돌이 발생하면 변경을 되돌리거나 커밋하세요.
  • 충돌이 pop을 통해 발생하면 스태시를 삭제하지 않습니다.

Git 스태시 샘플 워크플로우

  1. 파일 수정
  2. 파일 스테이징
  3. 스태시하기
  4. 스태시 디렉터리 보기
  5. git status로 보류 중인 변경 사항 확인
  6. git stash pop으로 적용
  7. 변경 사항 확인을 위해 디렉터리 보기
# edit_this_file.rb 파일 수정
git add .

git stash save "edit this file의 변경 사항 저장"

git stash list
git status

git stash pop
git stash list
git status

관련 주제