기록하는삶

[깃/Git] commit history, VScode를 활용한 로컬 버전 관리 본문

IT 역량/Git, Github

[깃/Git] commit history, VScode를 활용한 로컬 버전 관리

mingchin 2022. 3. 18. 12:43
728x90
반응형

이고잉님의 수업을 통해 협업을 위한 깃, 깃허브의 기초 기능들에 대해 배웠다. 많이 듣지는 않았지만 생활 코딩 강의들도 감사한 마음으로 잘 들었던 기억이 있어서 반갑고 신기했는데, 죄송하게도 목소리와 강의 템포가 너무 졸려서,,,,,,,ㅠ 집중을 잘 못한 시간도 꽤 있었다. 강의 자체는 너무 훌륭하고 유용했기 때문에 몇 가지 정리해본다.

1) commit history 확인

깃허브 레퍼지토리에서 시계 아이콘을 눌러 이전의 커밋 기록들을 확인할 수 있다. 각 커밋은 SHA(Secure Hash Algorithm)로 암호화된 ID를 일종의 branch로 가지는 기록을 가지고 있고, <> 버튼을 눌러 해당 커밋 시점의 상태를 확인해볼 수 있다. 이렇게 commit별 버전 관리가 가능하다는 것이 가장 기본적이지만 강력한 기능 중 하나다.

 

2) 로컬에서의 버전 관리(feat. Vscode)

CLI로 깃을 활용하는 것 외에 Vscode에서 지원하는 소스 제어 기능을 활용해 쉽게 로컬 저장소를 관리하고, 이를 원격 저장소인 github에 연결하고 저장할 수 있는 방법을 배웠다.

위처럼 소스제어 메뉴에서 리포지토리 초기화를 누르면 'git init'과 같은 작업이 되어, .git폴더가 만들어진다.

변경 사항에 있는 파일들은 마지막 commit 이후 수정되거나 추가된 파일을 의미한다. (M: modified, U: untracked)

각 변경 사항의 오른쪽에 있는 + 버튼을 통해 일부만 '스테이징된 변경 사항'에 할당해 commit 할 수 있다. commit message는 위 메시지 칸에 입력해주면 된다. (git add 파일명 + git commit -m "메시지")

소스제어 레포지토리 혹은 소스 제어 오른쪽 메뉴에서 원격 -> 원격 추가에서 레포지토리 주소를 입력하면 원하는 레포지토리와 연결할 수 있다. (git remote add origin)

"변경 내용 동기화" 버튼은 pull+push의 동작을 하고, 풀 혹은 푸시만 하고 싶다면 역시 우측 메뉴에서 선택해 사용할 수 있다. 사실 나는 처음 CLI로 접해서 그런지 이게 편한건지 잘 모르겠다,, 수정한 전체 파일이 아니라 일부 소수 파일에 대한 작업을 진행하고, 이에 대한 commit을 하고 싶을 때는 유용할 것 같다.

extension에서 'git graph'를 설치하면 현재 작업 중인 폴더의 commit history를 시각화 할 수 있다. 지금은 간단한 예시이지만, branch가 여러 개로 분기한 상황, merge 등을 눈으로 볼 수 있다는 장점이 있다.

 

외에 예시를 다 첨부하지 못했지만 깃과 깃허브를 이용한 협업 과정에서 생길 수 있는 충돌 상황 등을 예시로 배우고, 그것을 해결하는 과정을 실습해보았다. 기억해둘 내용을 정리하면 아래와 같다.

 

  • HEAD는 working directory가 어떤 버전과 같은지 가리킨다. / 현재의 commit 버전 브랜치(보통 master)을 가리킨다.
  • HEAD를 옮기고 싶다면 과거의 commit 버전 중 하나로 checkout하면 된다.
    -> 현재 working directory가 과거 commit 버전으로 변경된다. 즉 과거의 버전으로 돌아갈 수 있다. (이때 HEAD는 (mater) branch가 아닌 특정 버전을 직접 가리키며, 이러한 상태를 detached head state 라 한다. 버전 관리를 위해 이 상태는 지양하는 것이 좋다.)
  • 다시 master로 돌아갈 땐 git checkout master
  • master는 마지막 commit 버전을 가리킨다.
  • pull = fetch(받아오기) + merge(병합)
    -> 변경 사항을 commit하기 전 혹은 작업을 시작하기 전 pull하는 습관을 가지는 것이 좋다.
  • 충돌은 merge시에만 생긴다.
    -> fetch만 실행했을 때는 충돌을 피할 수 있고, 충돌이 발생하는 상황에서 pull을 했을 경우 충돌되는 부분을 제외한 나머지 부분은 자동으로 merge하고, 충돌이 일어난 부분들을 자동으로 표기해주며 수정하라고 나온다.
728x90
반응형