[Tech/Git & GitHub] Git의 모든 것 3 - Git의 명령어 이해 및 실습
이렇게 크게 4단계의 저장 단계로 Git은 진행되며, 아래부터는 코드를 통해 쉽게 플로우를 이해해보려고 한다.
5. Git 명령어 이해 및 사용해보기
해당 부분을 이해하려면 본인이 직접 레포를 파서 코드를 업로드 해보면 이해가 쉽다. 혹은 github.io를 직접 만드는 것도 git을 이해하는데 수월하다 (후자 방식으로 해보니까 git의 전반적인 것들은 다 이해가 되었습니다. 레알 강추!)
5-1) 준비: Git 계정 설정
우선 나의 컴퓨터에 내가 사용할 깃허브 계정을 연결해주는 작업이 필요하다.
1
2
git config --global user.name "본인의 깃허브 이름"
git config --global user.email "본인의 깃허브 이메일 주소"
5-2) 새 폴더에서 Git 저장소 만들기
코드 작업을 수행할 폴더를 생성해주고, 해당 폴더 내로 들어간다. 이후 git init을 먼저 해줘야 git의 변경 이력 관리 등을 할 수 있게 된다!
1
2
3
mkdir git-practice
cd git-practice
git init
→ .git 폴더 생성 → 이 폴더가 바로 Local Repository이다.
5-3) 예제 파일 생성 및 수정 or Git clone
내가 수정하고 싶은 코드 파일을 수정하거나 생성해준다. 혹은 git clone을 해와서 코드 수정을 하면 된다.
1
2
# ex)
# git-practice/ex.ipynb 파일을 수정했다고 가정
5-4) Stage에 파일 올리기
add .
→ 해당 명령어를 작성하게 되면, 내가 수정한 모든 파일을 stage에 올리겠다는 의미이다.
add 특정 파일
→ 해당 명령어의 경우, 특정한 파일만 올리는 경우이다.
수정한 파일의 수가 적으면 아래의 명령어로, 수정한 파일의 수가 많으면 위의 명령어로 하면 편하게 할 수 있다.
(개인적으로 add . 하긴 함)
1
2
3
git add .
git add git-practice/ex.ipynb git-practice/exam.txt
5-5) 변경사항 확인
git status를 통해 현재 나의 상태를 확인할 수 있다. 자주 사용되니 알고 있어야 하는 명령어이다.
1
git status
5-6) 커밋 (로컬 저장소에 기록)
commit의 -m 은 message의 약어이다. 즉, ‘파일을 커밋하면서 메시지를 ‘파일 추가 및 버그 수정’으로 기록하겠다 라는 뜻이다.
git은 변경 사항을 추적하는 도구이기 때문에, 무엇을 수정했는지를 설명하는 메시지를 커밋마다 남겨야 한다. 그래야 나중에 버전을 되돌릴 때 언제 어떤 작업을 했는지 이해할 수 있기 때문이다.
1
git commit -m "git-practice/ex.ipynb git-practice/exam.txt 수정 완료"
5-7) GitHub 원격 저장소 연결
파일을 로컬 저장소에 올렸으니, github에 올릴 일만 남았다. 예를 들어, 나의 레포에 코드를 업로드하고 싶은 경우에 아래와 같이 remote 라는 명령어로 넣어주면 된다.
origin 인자의 경우, 내가 연결하고자 하는 깃허브 링크의 별칭이라고 생각하면 된다.
매번 깃 링크를 길게 작성하기는 귀찮으니, origin ~~~ git or 내가 원하는 별칭 git remote add codingtest ~~~.git 등 자유롭게 작성해서 사용하면 된다.
1
2
3
git remote add origin https://github.com/your-id/your-repo.git # or github에 연결할 레포 링크
git remote -v # 연결되었는지 확인
git remote rm origin #연결된 원격 저장소 연결 해제
5-8) GitHub 원격 저장소 연결브랜치 만들고 이동
깃 레포와 연결을 완료했으니, 내가 코드를 푸시할 branch를 설정해줘야 한다.
기본 브랜치(main or master)로 올릴거면 굳이 설정할 필요는 없다.
1
git checkout -b dev #새 브랜치를 만들고 동시에 이동하는 명령어
| 명령어 | 설명 |
|---|---|
git branch | 현재 브랜치 목록 보기 |
git checkout 브랜치명 | 다른 브랜치로 이동 |
git checkout -b 브랜치명 | 새 브랜치를 만들고 이동 |
git switch 브랜치명 | (checkout과 같지만 더 직관적인 명령어, 최신 Git 권장) |
git switch -c 브랜치명 | 새 브랜치 생성 후 이동 (checkout -b와 동일) |
git branch -d 브랜치명 | 브랜치 삭제 (로컬에서) |
5-9) GitHub에 올리기 (푸시)
origin으로 지칭한 레포에서 main(dev) 브랜치로 코드를 push하겠다 라는 의미이다.
1
git push origin main(dev)
여기까지는 나의 컴퓨터에서 깃허브로 코드를 올리는 플로우였지만, 올린 코드에서 상대방이 수정해놓은 코드를 다시 가져오거나 변경사항이 있는 코드를 작업해야 할 때는 아래와 같은 방법을 통해 사용할 수 있다.
6. Git 추가 명령어 (fetch, pull, commit 취소 방법)
화살표 반대 방향 (왼쪽으로 가는 방향)을 실습으로 해보겠다.
6-1) git fetch
GitHub 등의 원격 저장소에 다른 사람이 코드를 수정해 올렸다고 가정했을 때, git fetch를 하면
그 변경 내역은 로컬 저장소에 저장되지만, 내 작업 중인 코드에는 아무 영향도 주지 않는다.
.git에만 변경/수정 내역이 저장된다고 보면 된다. 다른 팀원이 어떤 코드를 수정했고 변경했는지를 확인하기 위함이다.
1
git fetch origin
6-2) git pull
원격 저장소의 내용을 가져오고 내 작업 디렉토리에 적용까지 한다. 다시 말해, 내 작업 디렉토리에 바로 반영이 되기 때문에 파일이 변경된다.
1
git pull origin main
즉, 가져오기(fetch) + 병합(merge)을 한 번에 수행하는 명령어라고 생각하면 된다.
6-3) git commit 취소 방법 (3가지 상황에 대해)
1
git reset [옵션] [어디까지 되돌릴지]
| 옵션 | 의미 | 영향 받는 범위 |
|---|---|---|
--soft | 커밋만 되돌림 | 커밋 O / Stage 유지 / 파일 유지 |
--mixed | 커밋 + Stage 되돌림 (기본값) | 커밋 O / Stage O / 파일 유지 |
--hard | 커밋 + Stage + 파일까지 되돌림 | 커밋 O / Stage O / 파일도 O (주의!) |
커밋만 취소 (파일은 그대로 유지)
메시지를 잘못 썼거나, 커밋 타이밍만 조정하고 싶을 때 사용한다.
파일 상태는 그대로이고, Stage(대기 중인 상태)도 유지 된다. 메세지만 고치고 다시 커밋할 때 사용한다.
HEAD는 현재 내가 위치한 커밋을 의미한다. ~1은 그 바로 전 커밋(이전 커밋)을 뜻하며, HEAD~2의 경우, 두 단계 전 커밋으로 되돌릴 것이라는 의미인다.
– soft: 커밋만 되돌릴 때 사용
1
git reset --soft HEAD~1
커밋 + Stage에서 제거 (파일은 작업 디렉토리에 남음)
커밋도, add도 잘못해서 처음부터 다시 올리고 싶을 때 사용한다.
해당 명령어를 작성하고, 다시 git add로 올리고 커밋하면 된다.
– mixed: 커밋 + Stage 되돌림
1
git reset --mixed HEAD~1
커밋 + Stage + 작업 디렉토리까지 모두 되돌림
커밋 + Stage + 파일 수정까지 전부 취소할 때 사용한다.
즉, 정말로 완전히 없애고 처음 상태로 되돌리고 싶을 때 사용한다.
– hard: 커밋 + Stage + 파일까지 되돌림
1
git reset --hard HEAD~1
※ 실수 방지를 위해 –hard는 신중하게 사용해야 한다.
한 번 이해하고 사용해보면, 왜 이렇게 어려워했지 이 생각이 들더라구요. 저처럼 헤매시는 혹은 헤매셨던 분들은 포스팅 보시고 많이 알아가셨으면 좋겠습니다! O(∩_∩)O
🔗 참고 링크
- https://velog.io/@sohtks/Git-Git-사용법-기초
- https://gitforwindows.org/img/gw1.png
- https://www.google.com/url?sa=i&url=https%3A%2F%2Fvelog.io%2F%40kbm940526%2Fseries%2FGIT%25EC%2582%25AC%25EC%259A%25A9%25EA%25B8%25B0&psig=AOvVaw0I53OSZAsNJQ-Dl2qQu-n0&ust=1752284743384000&source=images&cd=vfe&opi=89978449&ved=0CBcQjhxqFwoTCMCH4r_Xs44DFQAAAAAdAAAAABAZ
- https://www.google.com/url?sa=i&url=https%3A%2F%2Fdatascientest.com%2Fen%2Fgit-everything-you-need-to-know-about-this-essential-tool-for-developers&psig=AOvVaw2w53WXZmCef7GJWaBWhK-x&ust=1752301045120000&source=images&cd=vfe&opi=89978449&ved=0CBQQjRxqFwoTCPiK-puUtI4DFQAAAAAdAAAAABAp
