[태그:] GitHub Desktop

  • 깃허브 저장·커밋·푸시, 셋 다 저장 아니었어? 컴맹이 헷갈린 차이 정리

    깃허브 저장·커밋·푸시, 셋 다 저장 아니었어? 컴맹이 헷갈린 차이 정리

    작성자: 컴맹 집사

    대표 이미지: 저장·커밋·푸시는 포장하고 송장을 붙여 보내는 택배와 비슷하다 (사진: tama66 / Pixabay)

    이 글에서 얻는 것

    • 이런 분께 앱을 고치고 저장했는데 인터넷에 반영되지 않아 답답한 분
    • 핵심 답 저장은 포장, 커밋은 송장을 붙여 접수, 푸시는 배송이다. 푸시까지 해야 고친 내용이 GitHub(인터넷)에 도착한다
    • 바로 쓰는 팁 고쳤는데 그대로라면 저장에서 멈추지 않았는지, 커밋과 푸시까지 했는지부터 확인하자

    나도 처음에는 커밋과 푸시가 같은 말인 줄 알았다. 둘 다 “올린다”는 뜻 아닌가? 게다가 파일은 이미 Ctrl+S로 저장했는데 왜 또 뭘 눌러야 하는지 이해가 안 됐다.

    그 차이를 알게 된 건, 분명히 고쳤는데 아무것도 바뀌지 않은 날이었다.

    고쳤는데 왜 그대로지?

    강아지 앱의 질문 문구를 하나 고쳤다. “산책할 때 어떤가요?”를 “산책할 때 우리 아이는 어떤가요?”로. 메모장에서 저장하고, 내 컴퓨터에서 열어 보니 잘 바뀌어 있었다.

    그런데 GitHub 웹사이트에 들어가 보니 예전 문구 그대로였다. 몇 번을 새로고침해도 마찬가지였다.

    AI에게 물었다.

    파일을 저장했는데 GitHub에는 반영이 안 돼. 왜 그래?

    답은 짧았다. “저장만 하고 커밋과 푸시를 안 하셨네요.”

    세 단계를 택배에 비유하면

    AI가 해 준 택배 비유가 가장 이해하기 쉬웠다.

    단계 하는 일 택배로 비유하면
    저장 (Ctrl+S) 내 컴퓨터의 파일을 고친다 물건을 포장한다
    커밋 (Commit) 바뀐 내용을 설명과 함께 기록한다 송장을 붙이고 접수한다
    푸시 (Push) 기록을 GitHub(인터넷)로 보낸다 택배 기사가 배송한다

    포장만 해 두면 물건은 내 방에 그대로 있다. 접수를 해야 기록이 생기고, 배송이 되어야 상대방에게 도착한다. 나는 포장만 해 놓고 왜 도착을 안 하냐고 묻고 있었던 셈이다.

    조금 더 정확하게

    저장

    메모장이나 코드 편집기에서 Ctrl+S를 누르는 것. 내 컴퓨터 안의 파일 내용만 바뀐다. GitHub는 이 사실을 모른다.

    커밋(commit)

    “지금 이 상태를 하나의 버전으로 기록해 줘”라는 뜻이다. (출처: Pro Git, 변경 사항 기록) 커밋할 때는 커밋 메시지라는 짧은 설명을 적는다. 예: 질문 1번 문구 수정.

    중요한 점은 커밋이 아직 내 컴퓨터 안에서만 남는 기록이라는 것이다. 인터넷에는 아직 올라가지 않았다.

    푸시(push)

    내 컴퓨터에 쌓인 커밋들을 GitHub로 보내는 것. 푸시를 해야 비로소 GitHub 웹사이트에도 바뀐 내용이 보인다.

    GitHub Desktop에서 실제로 누르는 순서

    1. 파일을 고치고 저장한다.
    2. GitHub Desktop을 열면 왼쪽 Changes 탭에 바뀐 파일이 보인다. 오른쪽에는 빨간색(지운 줄)과 초록색(추가한 줄)으로 무엇이 바뀌었는지 표시된다.
    3. 왼쪽 아래 Summary 칸에 커밋 메시지를 적는다. 예: 질문 1번 문구 수정
    4. Commit to main 버튼을 누른다. → 기록 완료
    5. 위쪽의 Push origin 버튼을 누른다. → GitHub로 전송 완료

    맨 처음 한 번은 5번 자리에 Publish repository라는 버튼이 나온다. 아직 GitHub에 이 저장소가 없으니 “처음 올리기”를 하라는 뜻이다. 한 번 올리고 나면 그다음부터는 Push origin으로 바뀐다.

    왜 굳이 커밋과 푸시를 나눠 놨을까

    처음에는 버튼 하나로 합쳐 주면 편할 텐데 싶었다. 앱을 계속 고치면서 나눠 둔 이유를 알게 됐다.

    1. 작은 단위로 기록할 수 있다.
    질문 문구 수정 → 커밋, 버튼 색 변경 → 커밋, 결과 설명 수정 → 커밋. 이렇게 잘게 나눠 두면 나중에 “버튼 색 바꾼 것만 되돌리기”가 가능하다.

    2. 인터넷이 없어도 기록은 남길 수 있다.
    커밋은 내 컴퓨터 안에서 일어나니까, 인터넷이 없어도 할 수 있다. 푸시는 나중에 한꺼번에 해도 된다.

    3. 푸시에는 결과가 따른다.
    나중에 알게 된 가장 중요한 이유다. 앱을 인터넷에 배포한 뒤로는 푸시하는 순간 실제 앱이 바뀐다. 그래서 푸시는 충분히 확인한 다음에 하는 동작이 됐다. 이 이야기는 Vercel 글에서 이어진다.

    커밋 메시지, 이렇게 쓰기로 했다

    처음에는 커밋 메시지를 수정, ㅇㅇ, 1처럼 대충 썼다. 며칠 뒤 되돌릴 버전을 찾으려는데 전부 수정이라 어느 게 어느 건지 알 수가 없었다.

    첫날 남긴 커밋 기록 목록
    개발 첫날인 9월 19일에 남긴 실제 커밋 기록. 한 줄이 커밋 하나다
    출처: 앱 저장소(GitHub)의 실제 기록을 정리해 직접 제작

    그 뒤로 정한 규칙은 이렇다.

    • 무엇을 했는지 한 줄로 쓴다: 결과 화면에 작위 설명 추가
    • 왜 했는지가 중요하면 덧붙인다: 총집사가 안 나오는 문제 수정 - 유형별 작위 연결 조정
    • 한 커밋에는 한 가지 변경만 담는다.

    AI에게 코드 수정을 요청할 때 “이번 수정에 어울리는 커밋 메시지도 써 줘”라고 덧붙이면 알아서 적어 주기도 한다. 꽤 유용했다.

    초보자가 자주 하는 실수

    • 저장을 안 하고 커밋하려 한다. Changes 탭에 아무것도 안 뜨면 먼저 저장했는지 확인하자.
    • 커밋만 하고 푸시를 잊는다. GitHub Desktop 위쪽 버튼에 숫자(↑1 같은)가 떠 있으면 아직 안 보낸 커밋이 있다는 뜻이다.
    • 여러 가지를 한 커밋에 몰아넣는다. 문제가 생기면 전부 같이 되돌려야 한다.

    되돌리기가 필요할 때

    커밋을 잘게 해 두면 되돌리기도 쉽다. GitHub Desktop의 History 탭에서 되돌리고 싶은 커밋을 오른쪽 클릭하면 Revert changes in commit이라는 메뉴가 있다. 그 커밋에서 바꾼 내용만 거꾸로 되돌리는 새 커밋이 만들어진다. 되돌린 뒤에도 푸시를 해야 GitHub에 반영된다는 점은 똑같다.

    처음 이 기능을 쓴 건 작위증 배경색을 바꿨다가 글자가 안 보이게 됐을 때였다. 배경색 변경 커밋만 되돌리고, 그 전에 한 질문 수정은 그대로 살릴 수 있었다. 여러 가지를 한 커밋에 몰았다면 불가능했을 일이다.

    초보자 팁: 오늘 작업을 마칠 때는 GitHub Desktop 위쪽 버튼에 숫자가 남아 있지 않은지 확인하자. 보내지 않은 커밋이 남아 있으면 다음 날 헷갈린다.

    이제는 이렇게 이해한다

    저장은 나를 위한 것, 커밋은 기록을 위한 것, 푸시는 세상에 보내기 위한 것.

    이 순서가 몸에 익고 나니 앱을 고치는 과정 전체가 정리됐다. 고친다 → 확인한다 → 커밋한다 → 푸시한다. 그리고 이 마지막 푸시가, 다음에 배울 Vercel과 연결되는 출발 신호가 됐다.


    이전 글: 깃허브(GitHub)가 뭐길래? 코딩 몰라도 이해되는 앱 타임머신 이야기
    다음 글: Vercel이 뭐길래 내 앱에 주소가 생겼을까? 배포 서비스 쉬운 설명

  • 깃허브(GitHub)가 뭐길래? 코딩 몰라도 이해되는 앱 타임머신 이야기

    깃허브(GitHub)가 뭐길래? 코딩 몰라도 이해되는 앱 타임머신 이야기

    작성자: 컴맹 집사

    대표 이미지: 코드는 여러 파일로 나뉘어 있고, GitHub는 이 파일들을 보관한다 (사진: pexels / Pixabay)

    이 글에서 얻는 것

    • 이런 분께 파일 이름에 ‘최종’, ‘진짜 최종’이 쌓여 가는 분
    • 핵심 답 GitHub는 고칠 때마다 언제, 무엇을, 왜 바꿨는지 기록이 남는 클라우드 폴더다. 파일은 하나만 두고 버전은 GitHub가 기억한다
    • 바로 쓰는 팁 명령어가 어렵다면 버튼으로 쓰는 공식 프로그램 GitHub Desktop부터 설치하자

    index-진짜최종-수정2.html

    앱을 만든 지 사흘째, 내 폴더에 있던 파일 이름이다. 수정할 때마다 혹시 몰라 복사본을 만들었더니 어느새 열 개가 넘었다. 어제 잘 되던 버전이 어떤 파일인지 기억도 나지 않았다.

    AI에게 이렇게 물었다.

    파일 버전이 너무 많아져서 헷갈려. 어떻게 관리해?

    돌아온 답의 첫 단어가 GitHub(깃허브)였다. 이름은 들어 봤지만 개발자들만 쓰는 무언가라고만 생각했던 서비스다.

    처음 들은 설명은 하나도 이해가 안 됐다

    인터넷에서 찾은 첫 설명은 이랬다.

    GitHub는 Git 기반의 분산 버전 관리 시스템을 위한 원격 저장소 호스팅 서비스이다. (출처: GitHub 공식 문서)

    한 문장에 모르는 단어가 다섯 개였다. 그래서 AI에게 다시 부탁했다. “코딩을 전혀 모르는 사람에게 비유로 설명해 줘.”

    그 뒤에 들은 설명이 훨씬 와닿았다.

    내가 이해한 GitHub

    GitHub는 “앱 파일을 위한 기록이 남는 클라우드 폴더”다.

    • 클라우드 폴더: 내 컴퓨터가 아니라 인터넷에 파일을 보관한다. 네이버 MYBOX나 구글 드라이브처럼.
    • 기록이 남는다: 파일을 고칠 때마다 “언제, 무엇을, 왜 바꿨는지”가 기록된다. 예전 상태로 되돌리는 것도 가능하다.

    구글 드라이브와 다른 점은 두 번째다. 드라이브는 파일을 덮어쓰면 끝이지만, GitHub는 수정 이력 전체를 차곡차곡 쌓아 둔다. 그래서 index-최종.html 같은 복사본을 만들 필요가 없다. 파일은 index.html 하나만 두고, 버전은 GitHub가 기억한다.

    Git과 GitHub는 다른 것이었다

    헷갈렸던 부분이 하나 더 있었다. Git과 GitHub가 같은 건 줄 알았다.

    이름 쉽게 말하면
    Git(깃) 파일의 변경 기록을 남기는 도구(프로그램)
    GitHub(깃허브) Git으로 남긴 기록을 인터넷에 보관하는 서비스(웹사이트)

    비유하자면 Git은 “일기 쓰는 방법”이고, GitHub는 “일기장을 보관하는 도서관”이다. 초보자 입장에서는 GitHub 웹사이트와 GitHub Desktop 프로그램만 쓰면 Git을 따로 공부하지 않아도 됐다.

    새로 알게 된 단어, 저장소(repository)

    GitHub에서 가장 먼저 만나는 단어가 repository(레포지토리), 줄여서 레포다. 우리말로는 저장소라고 한다.

    GitHub 저장소 안의 파일 구성
    실제 앱 저장소에 들어 있는 주요 파일과 역할
    출처: 앱 저장소(GitHub)의 실제 기록을 정리해 직접 제작

    저장소는 프로젝트 하나를 담는 폴더라고 생각하면 된다. 강아지 앱 하나가 저장소 하나다. 나중에 다른 앱을 만들면 저장소를 새로 만든다.

    GitHub를 시작한 순서

    실제로 내가 한 순서를 적어 둔다.

    1. 계정 만들기

    github.com에 들어가 Sign up으로 가입했다. 이메일, 비밀번호, 사용자 이름을 정하면 된다. 사용자 이름은 나중에 주소에 들어가니 너무 이상하지 않게 짓는 걸 추천한다.

    2. GitHub Desktop 설치

    GitHub는 원래 명령어로 쓰는 경우가 많은데, 초보자에게는 GitHub Desktop이라는 프로그램이 훨씬 편했다. 버튼을 눌러서 쓸 수 있는 공식 프로그램이다. desktop.github.com에서 내려받아 설치하고, 방금 만든 계정으로 로그인했다.

    3. 기존 앱 폴더를 저장소로 만들기

    GitHub Desktop에서 File → Add local repository를 누르고, 앱 파일이 있는 kba-butler-app 폴더를 골랐다. “이 폴더는 아직 저장소가 아니다”라는 안내가 뜨면, 안내에 있는 create a repository 링크를 눌러 저장소로 만들면 된다.

    4. 정리부터 했다

    저장소를 만들기 전에 폴더 안의 index2.html, index-최종.html 같은 복사본을 전부 지우고, 제대로 돌아가는 index.html 하나만 남겼다. 이제부터는 GitHub가 버전을 기억해 줄 테니까.

    처음엔 “이게 왜 필요하지?” 싶었다

    솔직히 설정을 마친 직후에는 달라진 게 없어 보였다. 파일은 여전히 내 폴더에 있었고, 앱도 똑같이 열렸다. 괜히 복잡한 것만 하나 늘어난 기분이었다.

    GitHub의 진가를 느낀 건 며칠 뒤였다. 결과 화면을 고치다가 앱이 완전히 망가졌는데, GitHub Desktop의 History 탭을 열어 보니 어제 저장해 둔 기록이 그대로 있었다. 거기서 망가지기 전 상태로 되돌리는 데 1분도 걸리지 않았다. 복사본 열 개를 뒤지던 때와는 비교가 안 됐다.

    그때 확실히 알았다. GitHub는 앱을 위한 타임머신이었다. 저장할 때마다 그 순간의 앱을 사진처럼 찍어 두고, 일이 꼬이면 원하는 날짜로 돌아가면 된다. “진짜최종-수정2” 같은 파일 이름과는 이제 작별이다.

    그리고 GitHub가 필요한 진짜 이유는 따로 있었다. 앱을 인터넷에 올리는 서비스(Vercel)가 GitHub에 있는 파일을 가져다 쓴다는 것. 이건 뒤에서 이어서 쓸 예정이다.

    초보자가 알아 두면 좋은 것

    • 저장소를 공개(Public)로 할지 비공개(Private)로 할지 고를 수 있다. 처음 연습하는 앱이라면 비공개로 해도 된다.
    • 비밀번호나 개인 정보가 담긴 파일은 올리지 않는다. 공개 저장소는 누구나 볼 수 있다.
    • GitHub에 올려도 내 컴퓨터의 파일은 그대로 있다. 옮기는 게 아니라 복사본과 기록을 보관하는 것이다.

    GitHub를 쓰기 전과 후

    일주일쯤 써 보고 달라진 점을 비교해 보면 이렇다.

    전 후
    수정할 때마다 복사본 파일 생성 파일은 하나, 버전은 기록으로
    어느 파일이 최신인지 헷갈림 History에서 날짜별로 확인
    망가지면 복사본을 뒤져 복구 이전 기록으로 바로 되돌림
    컴퓨터가 고장 나면 전부 사라질 위험 인터넷에 사본이 있어 안심

    GitHub Desktop을 열자마자 또 모르는 버튼이 보였다. Commit과 Push. 저장만 하면 되는 줄 알았는데, 왜 버튼이 두 개나 더 있을까?


    이전 글: AI에게 “앱 만들어 줘” 했더니 생긴 일, 첫 결과물과 시행착오
    다음 글: 깃허브 저장·커밋·푸시, 셋 다 저장 아니었어? 컴맹이 헷갈린 차이 정리