Original article: How to understand Git: an intro to basic commands, tips, and tricks

저는 최근에 한 동료의 멘토가 되었습니다. 그리고 제 멘티가 깃(Git)에 대해 몇 가지 상황을 물어보았습니다. 이 글은 제 동료를 위한 것입니다! 추신: 우리가 시작할 때 이 글을 썼어야 하는건데 이제 지금이라도 도움되길 바랍니다!

그리고 기억하세요: 어떤 것을 배우기 위한 가장 좋은 방법은 스스로 해 보는 것입니다. 그리고 내 멘토는 언제나 내게 말하곤 합니다: Udaraj!

기초(Basics)

깃 로고

그래서 왜 깃(Git)이 그렇게 중요할까요?

먼저, 깃의 위키피디아 페이지 첫번째 줄을 인용해서 시작해 봅시다:

"_*깃([긷])*은 컴퓨터 파일의 변화를 추적하고 여러 사람들 사이에서 그 파일을 조정하는 버전 관리 시스템입니다._"

이것은 다시 말해서 깃의 가장 기본적이고 중요한 기능이 여러 팀에게 동시에 같은 프로젝트로 코드를 더하게 (그리고 통합)하게 허용한다는 걸 의미합니다. 이러한 능력을 프로젝트에 더함으로써 팀을 더 효율적이게 하고 더 큰 규모의 프로젝트나 더 복잡한 문제들에 일할 수 있는 능력을 제공합니다.

깃이 정말 잘하는 또 다른 많은 것들이 있습니다: 변경점을 원복, 새로운 기능을 더하기 위한 새 브랜치(branches) 생성, 병합 시 발생하는 충돌(conflict) 해결 등을 허용합니다.

깃이 동작하는 법

깃은 저장소(repositories) 안에 프로젝트를 저장합니다. **커밋(Commits)**이 프로젝트로 만들어지면 깃에게 여러분이 생성한 새로운 코드나 변경한 코드에 대해 만족하는지 말해줄 것입니다.

새로운 코드/변경점들은 브랜치에 커밋됩니다. 대부분의 일은 다른 브랜치에 커밋되고 그 다음 마스터 브랜치로 병합됩니다. 이에 대한 모든 것은 프로젝트로 같은 디렉토리(directory) 안이지만 .git이라고 불리는 하위 폴더 안에 저장됩니다.

동료와 코드를 공유하기 위해서는 여러분이 저장소로 변경점을 **푸쉬(push)**합니다. 동료로부터 새로운 코드를 얻어오려면 저장소로부터 변경점을 **풀(pull)**합니다.

공용 깃 저장 서비스 사례: Bitbucket, GitHub, Gitlab

그러면 GitHub, GitLab, Bitbucket은 무엇일까요?

질문해줘서 고마워요! 이러한 종류의 어플리케이션들은 저장소 관리(repository management) 서비스라고 불립니다. 현대 소프트웨어 개발에 중요한 역할을 수행합니다.

깃과 깃허브가 많은 회사들에서 지향하는 버전 관리 솔루션입니다만, 깃허브는 GitLab이나 Bitbucket과 같은 강력
한 경쟁자들을 가집니다. 하지만 만약 깃허브를 사용하는 방법을 알고 있다면 GitLab이나 Bitbucket으로 일하는데 아무 문제가 없을 것입니다.

그래서 요점은: 깃은 도구이고 깃허브는 깃을 사용하는 프로젝트를 위한 서비스입니다.

흥미로운 프로젝트를 탐색하고 다른 개발자들과 연결하려면 어디로 가야할까요?

깃허브, GitLab, Bitbucket은 공용 저장소 검색 기능과 다른 사용자들을 쉽게 팔로우 가능하게 하는 기능을 가지고 있습니다.

이제 어째서 왜 깃과 깃허브(또는 GitLab/Bitbucket)이 중요한지 보이시나요? 명령어에 대해 이야기 하기 전에 이야기 드릴 남은 한가지는 깃을 사용할 때 항상 따라야 하는 몇 가지 간단한 규칙입니다:

  • 규칙 1: 모든 새로운 프로젝트마다 깃 저장소를 생성하라
  • 규칙 2: 모든 새로운 기능마다 새로운 브랜치을 생성하라

명령어

깃을 시작하기 위해서는 컴퓨터에 반드시 깃을 가지고 있어야 합니다. 설치하지 않았다면 여기로 가서 지시사항들을 따라하면 됩니다.

새로운 깃 저장소 초기 설정: Git init

모든 코드 내용은 저장소 안에 추적됩니다. 깃 저장소를 초기 설정하려면 해당 프로젝트 폴더 안에 이 명령어를 사용하세요. 이것이 .git 폴더를 만들어 줄 것입니다.

git init

Git add

이 명령어는 하나 또는 모든 변경 파일들을 본 무대 영역으로 더합니다.

어떤 하나의 특정 파일을 올리기 위해서는:

git add filename.py

신규 또는 수정되거나 삭제된 파일들을 올리기 위해서는:

git add -A

신규 또는 수정 파일들을 올리기 위해서는:

git add .

수정 또는 삭제된 파일들을 올리기 위해서는:

git add -u

Git commit

이 명령어는 버전 이력을 파일 안에 기록합니다. -m이 뜻하는 것은 어떤 커밋 메세지가 뒤따른다는 의미입니다. 이 메세지는 커스텀이며 반드시 이것을 동료에게 알리는 용도로 또는 미래의 스스로에게 무엇이 해당 커밋 안에 더해졌는지 알리기 위해 사용해야 합니다.

git commit -m "your text"

Git status

이 명령어는 파일들을 초록색과 빨간색으로 리스트해 줄 것입니다. 초록색 파일들은 무대로 올려졌지만 아직 커밋되지 않은 것들입니다. 빨간색으로 표시된 파일들은 무대로 아직 올려지지 않은 것들입니다.

git status

브랜치에 작업하는 것

Git branch branch_name

이것은 새 브랜치를 생성합니다:

git branch branch_name

Git checkout branch_name

어떤 브랜치에서 다른 브랜치로 변경하려면:

git checkout branch_name

Git checkout -b branch_name

새로운 브랜치를 생성하고 그것으로 자동 전환하려면:

git checkout -b branch_name

이것은 간략하게:

git branch branch_name
git checkout branch_name

입니다.

Git branch

모든 브랜치를 리스트하고 현재 어떤 브랜치에 있는지 확인하려면:

git branch

Git log

이 명령어는 현재 브랜치에서 모든 버전 이력을 리스트해줄 것입니다:

git log

Push와 Pull

Git push

이 명령어는 커밋된 변경점들을 원격 저장소에 보냅니다:

git push

Git pull

원격 저장소에서 개인 컴퓨터로 변경점들을 가져오려면:

git pull

더 많은 명령어들과 해당 목록에 대한 상세 설명들을 알고 싶다면 공식 깃 문서를 확인하길 추천합니다.

유용한 정보 (Tip & Tricks)

커밋되지 않은 모든 변경점을 보낼 때

문자 그대로 이 명령어는 커밋되지 않은 모든 변경점을 보냅니다:

git reset --hard

개인 컴퓨터에서는 삭제하지 않고 깃에서만 파일을 삭제

종종 "git add" 명령어를 사용하면서 추가하지 않고 싶어했던 파일을 더해버릴 수도 있습니다.

"git add"를 사용하는 동안 주의하지 않는다면 커밋하기 원하지 않았던 파일을 더하게 될지도 모릅니다. 파일의 기록 버전(staged version)을 반드시 삭제해야 하고, 그리고나서 파일에 .gitignore를 추가하여 같은 실수를 두번 하는 일을 방지할 수 있습니다:

git reset file_name
echo filename >> .gitignore

커밋 메세지 수정

커밋 메세지를 수정하는 건 굉장히 쉽습니다:

git commit --amend -m "New message"

지금까지 읽어주셔서 감사합니다! 저의 freeCodeCamp 프로필에서 더 많은 글을 확인하세요: https://www.freecodecamp.org/news/author/goran/ 그리고 제 깃허브 페이지에 만들어둔 재미있는 것들을 확인해 보세요: https://github.com/GoranAviani