개인적으로 이해를 하기위해 정리하면서 쓴 글이라 비유가 적절치 않을 수 있습니다
감안하시고 읽어주시면 감사하겠습니다
(또한 이 글은 초보자를 위해 Github desktop
을 기준으로 설명하고 있음을 알려드립니다)
프로그래밍에 입문하게되면 여러가지 언어들과도 만나지만 필연적으로 만나게 되는것 중 하나가 Git
이다
나도 처음에는 Git
이 뭔지 몰랐고 새로운 것에 익숙치 않았지만 결국은 어느정도 적응하게 됐다
오늘은 Git
에 대해 알아보도록 하자
Git
은 Version control
을 해주는 녀석이라고 보면 된다
예를 들어 우리가 글을 쓰는 작가라고 해보자
우리는 하루에 A4로 10장의 글을 쓴다고 할 때 일주일이 지나면 70장의 글이 모인다
어느 날 내가 쓴 글을 읽던 중 맘에 들지 않는 부분을 수정했다고 해보자
근데 그 부분을 수정하니 스토리의 전개가 매끄럽지 않아 다른 곳들도 수정을 했다
그리고 다음날 아침 다시 읽어보니 수정 전이 좀 더 맘에 드는게 아닌가?
만약 당신이 Google drive
, Naver my box
, Apple iCloud
등에 저장을 해뒀다면
수정 전에 있던 글을 쉽게 복원할 수 있을 것이다
이게 바로 Git
이다
미숙했던 우리의 초기 코드들은 수정을 거듭해가는데 때로는 다시 되돌리고 싶을 때도 있고
무엇을 수정했는지 보고싶을 때도 있다
이를 하나하나 기억해주는게 Git
인 것이다
또한 우리는 클라우드서비스를 이용할 때 알기 쉽게 폴더를 만들어서 업로드를 한다
이 폴더역할을 하는 것이 Git
에서는 Repository
다
이때 폴더에 업로드하기 위해서는 doc
, docx
, hwp
등의 파일로 저장해야 된다
그러려면 손으로 쓴 글들을 내 컴퓨터에 저장해야 한다
이처럼 Local repository
에 저장하는 것을 Commit
이라고 한다
손으로 글을 쓰는 것을
add
로 이해하면 될 것이다
그리고 유명 클라우드 서비스에 업로드하듯 나의 Commit
을 Git
에 Push
한다
이것이 기본적인 Git
의 흐름이라고 보면 된다
사실 Git
에는 세 가지 Area
가 있다
Working area
는 나의 개인적인 행동구역이라고 생각하면 된다
VS Code
같은 IDE
로 코딩을 하고 수정을 하고 하는 것들이 이 Working area
에서 일어난다
Staging area
는 Commit
을 하기 전의 영역이다
내가 무엇을 Commit
할지 git add
로 각각 추가하거나 git add*
로 전부를 추가할 수도 있다
Staging area
로 보내기 싫을 때(선택적으로Commit
하고싶을 때)는.gitignore
를 만들면 된다
Commit area
는 누가 수정했는지, 수정한 시간은 언젠지 등 모든 정보를 갖고있는 영역이다
보통 Commit area
에 올라가면 우리는 Github
를 통해 볼 수 있게 된다
아래 이미지를 보면서 Git flow
를 이해해보자
여기까지 Git
의 기본적인 흐름을 이해했다면 다음은 Branch
에 대한 이야기다
이미지을 하나 보도록 하자
우리가 기본적으로 Commit
을 하는 곳은 Master(or main)
영역이다
Branch
들이 만들어지기 직전의 Commit
을 Common base
라고 하며 이는 Branch
들의 시작지점이 된다
이 Branch
에 새로운 것들을 작성하고 Commit
하면 Feature tip
이 되고 이는 Master tip
보다 조금 더 앞서가게 된다
중간에 Master tip
을 수정하게되면 Branch
들에게는 반영이 되지 않는다
이때 우리는 Update from default branch
를 통해 이 Branch
들에게 Maser tip
의 변경사항을 반영시킬 수 있다
그리고 이 Feature tip
의 내용을 Master tip
과 합치고 싶다면 원하는 Branch
를 Merge
하면 된다
Merge
를 했다면 이제 우리는 New merge commit
상태가 되는 것이다